Javascript正则表达式第一次工作正常,但不是第二次,再次工作第三次,而不是第四次等等:(
@H_502_2@脚本:
<script language="javascript" type="text/javascript"> var reg = /[^\w]/gi; function checkNonWordChars() { var str = $("#TestTextBox").val(); if (reg.test(str)) { alert('!!! Non-Word Char Exists !!!'); } else { alert('input accepted'); } } </script>@H_502_2@HTML:
<input type="text" id="TestTextBox" /> <input type="button" value="Test" onclick="checkNonWordChars();" />@H_502_2@如果我点击按钮一次,它会发出一个警告,说“!!!非Word Char Exists !!!“但是如果再次点击它,它会触发一个警告,说”输入接受“:(
解决方法
选项1
@H_502_2@使用构造函数而不是字面符号:
(测试也将提前lastIndex属性). @H_502_2@资料来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec @H_502_2@因此,在您的情况下,测试将仅工作在第1,第3,第5,…时间. @H_502_2@只有在Firefox 3中有一个标志y,当指定exec总是从0开始不是lastIndex,但这在你的情况下可能没有用. @H_502_2@您可以删除g标志.
var reg = new RegExp('[^\w]','gi');@H_502_2@更多关于这两者之间的差异:https://developer.mozilla.org/en-US/docs/Core_JavaScript_1.5_Guide/Regular_Expressions?redirect=no @H_502_2@选项2 @H_502_2@用$号标记字符串的末尾:
var reg = /[^\w$]/gi;@H_502_2@选项3 @H_502_2@如果您的正则表达式使用“g”标志,则可以多次使用exec方法来查找相同字符串中的连续匹配.当这样做时,搜索从正则表达式的lastIndex属性指定的str的子串开始
(测试也将提前lastIndex属性). @H_502_2@资料来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec @H_502_2@因此,在您的情况下,测试将仅工作在第1,第3,第5,…时间. @H_502_2@只有在Firefox 3中有一个标志y,当指定exec总是从0开始不是lastIndex,但这在你的情况下可能没有用. @H_502_2@您可以删除g标志.