1, 背景需求:
测试验证一个字串是否为8位数字
2, 代码如下:
<input type=button onclick= "test() " value= "why??? ">
<script>
var pattern = /^[\d]{8}$/g
function test() {
var pattern = /^[\d]{8}$/g
if(pattern.test( "12345678 ")) {
alert( "it 's Yes ");
} else {
alert( "it 's No ");
}
}
function getPattern() {
return /^[\d]{8}$/g;
}
</script>
3, 异常现象:
pattern这个变量在为全局或局部时,给程序带来的效果不一样,而且现象很奇怪!
如果我用全局的pattern,每次串的正则测试结果是更替变换(Yes/No);如果用局部变量,或者写死正则串,或者用getPattern()方法返回都正常。
这如何解释~?? 是ie对脚本的解析问题吗?
------解决方案--------------------
<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方法,就不必考虑全局局部了
个人意见,仅供参考
------解决方案--------------------
去掉全局匹配的g就没问题了
可是为什么呢?
等待高手解释
------解决方案--------------------
这样的贴子已经发过不少了
加g的patten在match后,lastIndex变化了,patten已经不是原来的patten.
当你再匹配的时候,匹配不到,lastIndex就又是0了,所以就这样交替着.
------解决方案--------------------
正则表达式,一看就头疼阿
------解决方案--------------------
学习~
------解决方案--------------------
看来都解决了。接点分。
------解决方案--------------------
遇到过这个问题,学习ing
------解决方案--------------------
那我就接分了,:)
------解决方案--------------------
ding
------解决方案--------------------
用pattern.compile();重新编译一下就行了,相当于初始化。
<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>
------解决方案--------------------
mark
学习