Nil*_*kar 12 javascript regex jquery
Javascript正则表达式第一次工作正常,但不是第二次,第三次工作,而不是第四次等等:(
脚本:
<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>
Run Code Online (Sandbox Code Playgroud)
HTML:
<input type="text" id="TestTextbox" />
<input type="button" value="Test" onclick="checkNonWordChars();" />
Run Code Online (Sandbox Code Playgroud)
如果我点击按钮一次,它会发出警告说"!!! 非单词字符存在!!!"但如果我再次点击它,它将发出警告说"输入已接受":(
选项1
使用构造函数而不是文字表示法:
var reg = new RegExp('[^\w]','gi');
Run Code Online (Sandbox Code Playgroud)
更多关于这两者之间的差异:https://developer.mozilla.org/en-US/docs/Core_JavaScript_1.5_Guide/Regular_Expressions?redirect = no
方案2
用$
符号标记字符串的结尾:
var reg = /[^\w$]/gi;
Run Code Online (Sandbox Code Playgroud)
方案3
如果正则表达式使用"g"标志,则可以exec
多次使用该方法在同一字符串中查找连续匹配.当你这样做时,搜索在开始substring
的str
由正则表达式的指定lastIndex
属性(test
也将推动lastIndex属性).
来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec
因此,在您的情况下,测试将仅在第1,第3,第5 ......时间工作.
仅在Firefox 3中有一个标志y
,当指定时exec
始终从0开始,lastIndex
但这可能对您的情况没有用.
你可以删除g
标志.