array.length永远不等于零并暂停程序

时间:2013-12-05 15:40:18

标签: javascript regex arrays string-matching

如果字符串没有匹配,则该数组的长度不等于0,并且当没有if else语句时,不可能创建false语句以允许value匹配。

textarea是来自单个token的多行输入,var token = "//num"在这种情况下是function checkValid(value, token) { // Checks to see if value contains the token var reg = new RegExp(token, "g"); var result = value.match(reg); if (result.length == 1) { return true; } return false; } 在另一个函数中定义并传入。

这是我的检查功能:

{{1}}

如果输入文本包含多个令牌实例,我会得到一个错误的返回,这就是我想要的,同时一次出现的令牌也会返回true。但是,零次出现的令牌将不允许任何响应。在这一点上,我认为程序正在停止,但当然codepen没有表明情况就是这样。

2 个答案:

答案 0 :(得分:6)

如果没有匹配,match将返回null而不是空数组。

在检查result之前检查result.length是否存在。

function checkValid(value, token)
{
  // Checks to see if value contains the token
  var reg = new RegExp(token, "g");

  var result = value.match(reg);

  return result && result.length;
}

答案 1 :(得分:3)

如果没有匹配(<{3}}),

.match()会返回null,它不会返回空数组:

> 'aa'.match(new RegExp('a', 'g'))
[ 'a', 'a' ]
> 'a'.match(new RegExp('a', 'g'))
[ 'a' ]
> 'b'.match(new RegExp('a', 'g'))
null

然后,您可以检查结果是否为空:

if (result === null) return false

或以更紧凑的方式:

function checkValid(value, token)
{
  var reg = new RegExp(token, "g");
  var result = value.match(reg);
  return (result !== null && result.length === 1);
}