JavaScript错误:"val.match不是一个函数"

59

我正在使用正则表达式的match函数。

我使用的代码是:

if(val.match(/^s+$/) || val == "" )
然而,它会产生以下错误:
"val.match is not function"
什么是问题?

3
我们能否看到你定义了val的地方?确保val是一个字符串:val.toString()。或者您可以使用Regex.exec来隐式转换为字符串:/^s+$/.exec(val) - Reid
3
请确保变量val已经被定义并且是一个字符串。另外,我猜测你在正则表达式中的's'前面缺少了斜杠,如果是这样的话,你可以用"if(val.match(/^\s*$/))"替换你的if测试。 - Eric Wendelin
1
感谢Eric Wendelin先生的建议,我刚刚将代码更改为val.toString(),现在可以正常工作了。我是JavaScript的新手,如果对您的工作造成任何麻烦,请原谅。再次感谢Eric。 - zahir
2
似乎这个问题已经得到了解答 - 很高兴看到Eric得到了认可。你愿意把它作为一个答案添加吗? - johnhunter
@Eric:那应该是一个答案,而不是一个评论。 - Lightness Races in Orbit
显示剩余3条评论
3个回答

84

我认为val不是一个字符串。

我遇到了以下错误:

val.match 不是函数

这是由以下代码引起的。

var val=12; 
if(val.match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

如果您显式地将变量转换为字符串String(val),该错误就会消失。

var val=12; 
if(String(val).match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

如果您使用字符串,则无需进行转换。

var val="sss"; 
if(val.match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

谢谢!我正在使用 https://dev59.com/WnNA5IYBdhLWcg3wpfmu 上的代码,但是一直收到“不是函数”的错误信息,让我快疯了! - Mark Stewart
如果您需要实现某种管道转换,最好将传入的值转换为字符串以确保它始终正常工作。感谢@chrisp7575。 - robivictor

23

问题是: val不是字符串

我可以想到两个选项 1) 转换为字符串: 如果您确定val必须是字符串,则可能是一个好选择

"与上面的答案相同"

var val=12; 
if(String(val).match(/^s+$/) || val == ""){
   document.write("success: " + val);
}

2) 跳过该行:在我的情况下,最好只检查val的类型,如果不是字符串,则跳过该行,因为运行“match”函数并不是一个好主意。

val = 12;
if( val.match) {
  if(val.match(/^s+$/) || val == "" ) {
    document.write("success: " + val);
  }
} else {
    document.write("not a string: " + val);
}


5

注意:根据我的评论,将此作为答案。

确保val被定义并且是字符串。另外,我猜测你在正则表达式中的 's' 前面没有加斜杠是一个打字错误。如果是这种情况,你可以用 "if(val.match(/^\s*$)" 替换你的 if 测试。


我有一个类似的问题,在我的情况下,我正在验证该值是数字而不是字母表,将其转换为字符串是否是个好主意?因为当我这样做时,验证失败并返回了一个对象,而不是字符串(错误信息)或布尔值。 - Benjiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接