你如何正则表达式验证一串手机号码?

时间:2009-12-28 06:16:20

标签: javascript jquery regex validation

我需要验证这种类型的字符串

0415256987, 0452 654 987, 0411 236589, 0 410 258 987 etc.

每个数字都有10位数字,空格逗号,新行,是允许的。

在我的项目中,这是一个textarea,用户输入逗号分隔的手机号码字符串。 正则表达式用于js验证。 空间和新线路允许用户减少输入数字的难以置信的经验,并适应各种输入手机号码的风格

你会如何编写正则表达式来验证它?

我尝试了各种正则表达式字符串,所有这些都在第一个逗号后停止工作。 我最好发布我的js。也许还有其他一些错误,为什么它不起作用。 即时通讯使用jquery验证插件。 我还删除了10digit检查,并且它干扰了验证错误消息,并且可以在服务器上轻松修复(拒绝或解析)。

 $.validator.addMethod("numbersCommasSpacesOnly",   
                       function(value, element){
                                return /^(\d\s*\r*\n*-*,*)$/.test(value); 
                            }, 
                            "Only numbers, spaces and commas are allowed"
                 );


    $("#UserContactsOptinForm").validate({
        rules:  {
                "data[User][contacts]": {// compound rule
                                required: true, 
                                numbersCommasSpacesOnly: true
                            }
            },
        messages: {
                "data[User][contacts]":     {
                                required: "this field is required"
                            }
              }
    });

    });

谢谢

5 个答案:

答案 0 :(得分:4)

(\d\s*\r*\n*-*,*){10}

应该匹配10位数字和任意数量的空格,逗号,连字符和返回。

答案 1 :(得分:3)

首先,删除空格和换行符,然后测试:

function testNumber(numbers){
    if( !numbers ) return false;
    return numbers.replace(/\s+/gm,'').search(/^(\d{10},)*\d{10}$/)>-1;
}

这对于测试字符串以及数字之间的任何形式的间距都是预期的,并且不允许连续使用多个逗号。

要将此扩展到您的代码,只需替换您拥有的function(value,element)代码:

function(value,element){
    if( !value ) return false;
    return /^(\d{10},)*\d{10}$/.test(value.replace(/\s+/gm,''));
}

如果要忽略数字计数,可以将{10}替换为*

答案 2 :(得分:2)

匹配单个10位数字:

([ \n]*[0-9]){10}

然后匹配一个或多个,用逗号分隔:

(([ \n]*[0-9]){10}[ \n]*,)*([ \n]*[0-9]){10}

以上正则表达式至少与您的字符串匹配,使用http://www.regextester.com/验证。

答案 3 :(得分:0)

包含空格或短划线的10位数字,后跟逗号或更多空格,然后更多相同:

((\d[\s-]*){10}([\s,]+|\b))+

答案 4 :(得分:0)

在Java中,您可以先string.replaceAll("\\s*", "")。然后它将匹配\\d{10}。这只会匹配,而不是获得不同的部分,例如区号等