日期:2014-05-16  浏览次数:20263 次

一段简单却让人费解的代码,请指点(放分帖)!
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
学习