如何修改电话号码的正则表达式并仅接受数字

时间:2011-09-01 15:08:54

标签: javascript jquery regex phone-number

我有以下用于jquery validate插件的正则表达式方法。

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
    return this.optional(element) || phone_number.length > 9 &&
        phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

目前,它以此格式验证电话号码:203-123-1234

我需要更改为这样验证:2031231234

有人为我提供快速简便的解决方案吗?

6 个答案:

答案 0 :(得分:3)

您可以替换

phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);

用这个

phone_number.match(/\d{10}/);

\d表示匹配任何数字

{10}表示10次

答案 1 :(得分:2)

摆脱所有-?序列可能是最快捷的方式 - 它们意味着零个或-个字符。

这将把它减少到:

/^(1)?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{2}\d{4}$/

可以进一步简化为:

/^1?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{6}$/

如果您还想禁用区号周围的括号,可以进一步将其简化为:

/^1?[2-9]\d{2}[2-9]\d{6}$/

(从技术上讲,它与文字203-123-1234不匹配,因为第一个-之后的字符必须是2到9,所以我假设你只是在谈论格式而不是那里的值。)

答案 2 :(得分:2)

我认为更好的方法是用更简单的版本改变整个表达式,如下所示:

/^[0-9]{10}$/

已编辑,请注意(请参阅评论):

这只是如何验证格式的一个有限示例:111-222-3333 vs 1112223333,而不是正确的美国电话号码验证。

答案 3 :(得分:1)

如果您只想要十位数,那么

phone_number.match(/\d{10}/)

会做到的。如果你想匹配那里的任何其他条件(例如匹配1-2031231234和2031231234),你需要添加更多。

作为附注,你当前拥有的东西与203-123-1234不匹配,因为第一个连字符后面的第一个数字是1,并且它在那个地方寻找2-9。

答案 4 :(得分:0)

([0-9]{10}) this will match with 10 digit number.

答案 5 :(得分:0)

如果您想匹配所有格式,可以使用,包括203-123-1234和2031231234

编辑:我不是正则表达式专家,但我添加了“1-”支持

/^(?:1-?)?[(]?\d{3}[)]?\s?-?\s?\d{3}\s?-?\s?\d{4}$/

顺便说一句,有一个非常好的AIR工具用于正则表达式,它叫做RegExr,您可以在这里获取桌面版http://www.gskinner.com/RegExr/desktop/或使用在线版http://gskinner.com/RegExr/。还有一个“社区”部分,其中包含许多有用的正则表达式。这就是我拿那个的地方。