<input type=button onclick="test()" value="why???">
<script>
var pattern = /^[\d]{8}$/g function test() {
// var pattern = /^[\d]{8}$/g
if(("12345678").match(pattern)) {
alert("it's Yes");
} else {
alert("it's No");
}
} function getPattern() {
return /^[\d]{8}$/g;
}
</script>
这个与全局和局部变量关系好像不大,
因该是你的匹配方法造成的
test和exec的方法完成匹配後,停留在找到匹配位置的后面,
如果找不到匹配才能放回到字符的开始位置,因此就会出现一个yes一个no的情况。
如果用match方法,就不必考虑全局局部了个人意见,仅供参考
<script>
var pattern = /^[\d]{8}$/g function test() {
// var pattern = /^[\d]{8}$/g
if(("12345678").match(pattern)) {
alert("it's Yes");
} else {
alert("it's No");
}
} function getPattern() {
return /^[\d]{8}$/g;
}
</script>
这个与全局和局部变量关系好像不大,
因该是你的匹配方法造成的
test和exec的方法完成匹配後,停留在找到匹配位置的后面,
如果找不到匹配才能放回到字符的开始位置,因此就会出现一个yes一个no的情况。
如果用match方法,就不必考虑全局局部了个人意见,仅供参考
加g的patten在match后,lastIndex变化了,patten已经不是原来的patten.
当你再匹配的时候,匹配不到,lastIndex就又是0了,所以就这样交替着.
我改用match后的确可以。
如此看来,pattern去做校验匹配时,它真会保留上一次结果。
所以如果是全局变量,它的匹配状态被保存了,所以有上述异常
局部变量就不一样了,每次是一个新的pattern
可以这样理解吧?
重新查找时,由于匹配的位置变化造成的匹配结果差异。
<input type=button onclick="test()" value="why???">
<script>
var pattern = /^[\d]{8}$/g; function test() {
//var pattern = /^[\d]{8}$/
s ="12345678";
pattern.compile();
if(pattern.test(s)) {
alert("it's Yes");
} else {
alert("it's No");
}
} function getPattern() {
return /^[\d]{8}$/g;
}
</script>
解决方法总结:
1, 用match方法代替test
2, 去掉 g 参数限定
3, 用compile()初始化