Javascript 正则表达式应该通过 .test() 但似乎失败 - 为什么? [复制]

2024-03-23

在 JavaScript 中测试我的正则表达式时,我似乎得到了一个始终奇怪的结果。

这是我的小提琴:http://jsfiddle.net/s5fYf/15/ http://jsfiddle.net/s5fYf/15/

这是取自我正在构建的一个网络项目。我将验证对象数组传递到验证函数中,该函数会迭代它们,根据值验证每个规则。如果为 false,则应停止循环并返回一个返回对象,该对象从失败的规则中获取消息和 cssClass。

问题是即使正则表达式测试通过,验证方法似乎也会返回 false,这应该是不可能的!所以我觉得我错过了一些关键的东西。从调试输出中,您可以看到输出的正则表达式测试通过了,但在代码中测试时显然失败了。这与我在项目中看到的内容一致,如果我省略调试输出,返回值基本上会在 true 和 false 之间切换。

本质上是/regex/.test(value)函数似乎在 true 和 false 之间振荡,这是一致的,但不是我所期望的......所以,我的问题是是什么导致了这种奇怪的行为!?

我已经在解决方案之外测试了我的正则表达式,据我所知它有效。

UPDATE:

从我的正则表达式中省略“g”或全局标志解决了这个问题。

请参阅下面的答案,然后查看此链接以获取全局标志及其陷阱的完整说明:

为什么 Javascript 中带有全局标志的 RegExp 会给出错误的结果? https://stackoverflow.com/questions/1520800/why-regexp-with-global-flag-in-javascript-give-wrong-results


归根结底是这样一个事实:testjavascript 正则表达式的方法返回结果并将指针移至匹配项之后。

所以第一个调用返回 true,然后第二个返回 false。检查这个例子:http://jsfiddle.net/B9aVA/ http://jsfiddle.net/B9aVA/

var regex = /^.+$/g
var input = "Hello";
console.log(regex.test(input));
console.log(regex.test(input));

Writes

true
false

所以你的代码调用 test 两次:

case "regex":
    $(".debug-info").append('<span>Result: ' + validation[i].rule.test(value) + '</span><br />');
     if (!validation[i].rule.test(value))
          returnValue.isValid = false;
     break;

我的建议是打电话test一次并将结果存储在变量中,然后使用它

case "regex":
    var result = validation[i].rule.test(value);
    $(".debug-info").append('<span>Result: ' + result + '</span><br />');
     if (!result)
          returnValue.isValid = false;
     break;

这个故事的寓意是:方法可能有副作用,这就是它们与属性的区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 正则表达式应该通过 .test() 但似乎失败 - 为什么? [复制] 的相关文章

随机推荐