JavaScript 用正则表达式验证电话号码

3

大家好,

我正在尝试编写一个正则表达式来验证形式为##########(10位数字)的电话号码,即以下情况是有效的:1231231234或1111111111。无效的情况是少于10位数字或多于10位数字的数字字符串。

到目前为止,我所拥有的表达式是这样的:“\d{10}”

不幸的是,它不能正确地验证长度为11位或更长的字符串。

是否有人知道一个正则表达式来实现这个任务?


3
在提问之前,请先搜索以下链接:请点击 请点击 请点击 请点击 - sachleen
6个回答

8

您需要使用锚点,即

/^\d{10}$/

4

你需要锚定起始和结束位置

/^\d{10}$/

这个匹配10个数字,不包含任何其他字符。


3

这个表达式适用于谷歌表单中的10位电话号码,如下所示:

(123) 123 1234或123-123-1234或123123124

(\W|^)[(]{0,1}\d{3}[)]{0,1}[\s-]{0,1}\d{3}[\s-]{0,1}\d{4}(\W|$)

2

我添加了使用破折号(xxx-xxx-xxxx)的选项,以便提供更好的用户体验(假设这是您的网站):

var regex = /^\d{3}-?\d{3}-?\d{4}$/g
window.alert(regex.test('1234567890'));

http://jsfiddle.net/bh4ux/279/


更简单的方法是去掉破折号(如果您要容纳空格,也可以去掉),并使用一个简单的/^\d{10}$/表达式。 - RobG
@RobG,我已经为许多主要网站进行了大量的验证,我只是提到了一个事实,即如果用户无法输入破折号,他们会感到沮丧。你提到的正则表达式根本不允许使用破折号。 - Alex W
1
我建议在测试之前删除破折号和空格,例如 re.test(s.replace(/[\s-]/g)),而不是禁止使用它们。 - RobG

1
我通常使用


phone_number.match(/^[\(\)\s\-\+\d]{10,17}$/)

为了能够接受格式为12345678、1234-5678、+12 345-678-93或(61) 8383-3939的电话号码,世界各地输入电话号码的人没有真正的惯例。因此,如果您不必按国家验证电话号码,则这应该大部分有效。限制17是为了防止人们输入过多无用的连字符和字符。
除此之外,您可以删除所有空格、连字符和加号,并计算字符数以确保它至少为10个。
var pureNumber = phone_number.replace(/\D/g, "");

一个完整的解决方案是这两者的结合。
var pureNumber = phone_number.replace(/\D/g, "");
var isValid = pureNumber.length >= 10 && phone_number.match(/^[\(\)\s\-\+\d]{10,17}$/)  ;

0
或者这样做(它将从字符串中删除非数字字符)
var phoneNumber = "(07) 1234-5678";
phoneNumber = phoneNumber.replace(/\D/g,'');
if (phoneNumber.length == 10) {
    alert(phoneNumber + ' contains 10 digits');
    }
else {
    alert(phoneNumber + ' does not contain 10 digits');
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接