var reg = /^\(00852\)[ -]?\d{8}([ -]\d{1,4})?|00852[ -]\d{8}([ -]\d{1,4})?|0?\d{11}$/;
alert(reg.test(obj.value));
上面的正则表达式为什么输入"013313313313333333"这样的也返回true呢??
var reg = /^0?\d{11}|\(00852\)[ -]?\d{8}([ -]\d{1,4})?|00852[ -]\d{8}([ -]\d{1,4})?$/;
alert(reg.test(obj.value));
调换位置也没用
但是如果单独使用
var reg = /^0?\d{11}$/;
alert(reg.test(obj.value));
则可以判断出上面的"013313313313333333"是错误的var reg = /^\(00852\)[ -]?\d{8}([ -]\d{1,4})?|00852[ -]\d{8}([ -]\d{1,4})?$/;
alert(reg.test(obj.value));
这样也可以判断出00852-88888888这样的香港号码,为什么就是把它们连起来不行呢??

解决方案 »

  1.   

    今天我在项目中也遇到了这么一个类似的问题,有些东西吧,就是解释不清,不过这样能解决:function validate(sValue){
        var reg1 = /^0?\d{11}$/;
        var reg2 = /^\(00852\)[ -]?\d{8}([ -]\d{1,4})?|00852[ -]\d{8}([ -]\d{1,4})?$/;
        return reg1.test(sValue) || reg2.test(sValue);
    }
    alert("013313313313333333");
      

  2.   


    function validate(sValue){
        var reg1 = /^0?\d{11}$/;
        var reg2 = /^\(00852\)[ -]?\d{8}([ -]\d{1,4})?|00852[ -]\d{8}([ -]\d{1,4})?$/;
        return reg1.test(sValue) || reg2.test(sValue);
    }
    alert(validate("013313313313333333"));不好意思,少些了个方法名
      

  3.   

    见鬼了...
    又测试了下
    \d{5}-\d{4}|\d{5,6}
    这样也出错...输入5个字符以内还正常,输入超过20个字符了都还提示true....
    大概前30分钟前都还正常的...浏览器也清了缓存...也用FF 3.5测试了...
    既然就是死活不行...
      

  4.   

    我哭...
    刚辛辛苦苦测试的一个正则表达式也不行了...
    大概前一小时还是可以的...就在写了主楼上的那个正则表达式出错后,又测试了N个正则表达式
    只要使用到|的都不行...
    而第一个写的那个,之前反复测试了N次都可以的...
    现在既然也不行了...TAT
      

  5.   

    3L,超过20个,只要符合1个\d{5,6}不就会报true么...
      

  6.   

    var reg = /^\(00852\)[ -]?\d{8}([ -]\d{1,4})?$|^00852[ -]\d{8}([ -]\d{1,4})?$|^0?\d{11}$/;
      

  7.   

    你并没有在首尾加上限制啊(^$)
    不限制的话,只要符合就会报true的