Jon*_*Jon 7 javascript regex jquery
在javascript中测试我的正则表达式时,我似乎得到了一个奇怪的结果.
这是我的小提琴:http: //jsfiddle.net/s5fYf/15/
这是从我正在构建的Web项目中获取的.我将验证对象数组传递给我的验证函数,验证函数遍历它们,根据值验证每个规则.如果一个是假的,它应该停止循环并返回一个返回对象,该对象从失败的规则中获取消息和cssClass.
问题是即使正则表达式测试通过,验证方法似乎也返回false,这应该是不可能的!所以我觉得我错过了一些关键的东西.从调试输出中可以看到输出的正则表达式测试通过,但在代码中测试时显然会失败.这与我在项目中看到的内容一致,如果省略调试输出,返回值基本上在true和false之间切换.
本质上,/regex/.test(value)功能似乎真与假之间振荡是一致的,但不是我所期待的.所以,我的问题是什么原因造成这种奇怪的行为!?
我已经在解决方案之外测试了我的正则表达式,据我所知它可行.
更新:
从我的正则表达式中省略'g'或全局标志解决了这个问题.
请参阅下面的答案,然后阅读此链接以获取有关全局标志及其缺陷的完整说明:
Jam*_*iec 24
归结test为javascript正则表达式的方法返回结果并在匹配后移动指针.
所以第一个调用返回true,然后第二个调用返回false.查看此示例:http://jsfiddle.net/B9aVA/
var regex = /^.+$/g
var input = "Hello";
console.log(regex.test(input));
console.log(regex.test(input));
Run Code Online (Sandbox Code Playgroud)
写
true
false
Run Code Online (Sandbox Code Playgroud)
所以你的代码调用了两次测试:
case "regex":
$(".debug-info").append('<span>Result: ' + validation[i].rule.test(value) + '</span><br />');
if (!validation[i].rule.test(value))
returnValue.isValid = false;
break;
Run Code Online (Sandbox Code Playgroud)
我的建议是调用test一次并将结果存储在变量中,然后使用它
case "regex":
var result = validation[i].rule.test(value);
$(".debug-info").append('<span>Result: ' + result + '</span><br />');
if (!result)
returnValue.isValid = false;
break;
Run Code Online (Sandbox Code Playgroud)
故事的道德:方法可以产生副作用,这就是它们与属性的区别.
| 归档时间: |
|
| 查看次数: |
28392 次 |
| 最近记录: |