Javascript Regex应该通过.test(),但似乎失败了——为什么
Javascript Regex should pass .test() but appears to fail - why?
在javascript中测试regex时,我似乎一直得到一个奇怪的结果。
这是我的小提琴:http://jsfiddle.net/s5fYf/15/
这是从我正在建设的一个网络项目。我将一组验证对象传递到我的验证函数中,该函数对它们进行迭代,根据值验证每个规则。如果其中一个为false,它应该停止循环并返回一个返回对象,该对象从失败的规则中获取消息和cssClass。
问题是,即使regex测试通过,验证方法似乎也会返回false,这应该是不可能的!所以我觉得我错过了一些关键的东西。从调试输出中,您可以看到输出的regex测试通过了,但在代码中测试时显然失败了。这与我在项目中看到的一致,如果我省略调试输出,返回值基本上在true和false之间切换。
从本质上讲,/regex/.test(value)
函数似乎在真和假之间振荡,这是一致的,但不是我所期望的。。。所以,我的问题是,是什么导致了这种奇怪的行为!?
我已经在解决方案之外测试了我的正则表达式,据我所见,它是有效的。
更新:
从我的正则表达式中省略"g"或全局标志解决了这个问题。
请参阅下面的答案,然后点击此链接,了解全球标志及其陷阱的完整解释:
为什么在Javascript中带有全局标志的RegExp会给出错误的结果?
归根结底,javascript正则表达式的test
方法返回一个结果,并在匹配后将指针移到。
因此,第一个调用返回true,然后第二个调用返回false。检查此示例:http://jsfiddle.net/B9aVA/
var regex = /^.+$/g
var input = "Hello";
console.log(regex.test(input));
console.log(regex.test(input));
写入
true
false
所以你的代码调用测试两次:
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;
故事的寓意:方法可能有副作用,这就是它们与属性的区别。
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 为什么在我的单元测试中instanceOf的测试失败
- Javascript-为什么我的JQueryAJAX请求失败
- 为什么一个空的200会在jQuery中创建一个失败
- 为什么我会得到一个“;auth失败”;使用正确的凭据连接到MongoDB时出错
- 为什么当我在正则表达式中放置空格键时,我的 Javascript test() 函数失败了
- Jsonresult在我的Ajax调用中使用参数失败.为什么会发生这种事
- 为什么对img标记的前向引用在Chrome上失败,但在FireFox和IE上有效
- 为什么这个茉莉花节点测试没有失败
- 为什么创建和删除Azure表失败
- 为什么Angular 1.5双向绑定在将作用域变量传递给组件绑定时失败
- 为什么JavaScript函数在使用某些参数名称时会失败
- 尝试使用Javascript动态更改CSS失败.为什么?
- 为什么这个字符串比较在Jest的期望中没有失败
- 为什么 AJAX 在部分数据序列化方面失败
- 为什么这个jQuery颜色选择器在引导模式中失败
- 为什么在 IIS7 中托管 MVC3 项目时,我的 AJAX 加载第一次失败
- 为什么提交按钮在 extjs 中仍然有效,即使使用 vtype 的电子邮件验证失败
- 为什么表单元素中的Javascript会失败
- 简单的JavaScript空字符串检查,(空字符串)是什么意思,为什么失败