电话号码验证正则表达式

69

我正在使用这个模式来检查电话号码的有效性

^[0-9\-\+]{9,15}$
它适用于0771234567+0771234567,但我希望它也适用于077-1234567+077-1234567、+077-1-23-45-67和+077-123-45-6-7。在模式中应该改变什么?

1
你是否曾经找到了一个足够的解决方案? - Gent
如果你正在尝试这样做,那么你可能是错误的。电话号码长度不同,包括不同的国家代码,总体上比你想象的更奇怪。Python和Java都有可以上下文解析电话号码的库,你应该使用这些工具,而不是试图让正则表达式来完成这项工作。 - boatcoder
18个回答

1
The following regex matches a '+' followed by n digits


    var mobileNumber = "+18005551212";
    var regex = new RegExp("^\\+[0-9]*$");
    var OK = regex.test(mobileNumber);

    if (OK) {
      console.log("is a phone number");
    } else {
      console.log("is NOT a phone number");  
    }

0
/^(([+]{0,1}\d{2})|\d?)[\s-]?[0-9]{2}[\s-]?[0-9]{3}[\s-]?[0-9]{4}$/gm

https://regexr.com/4n3c4

已测试通过的号码

+94 77 531 2412

+94775312412

077 531 2412

0775312412

77 531 2412

// 不匹配

77-53-12412

+94-77-53-12412

077 123 12345

77123 12345


这个正则表达式有一些问题: 1. 国家代码最多可以有三个数字。 2. 您正在检查国家代码中的 数字,这也包括 ٠١٢٣٤٥٦٧٨٩ # 阿拉伯-印度 (来源: https://unix.stackexchange.com/a/414230) - dewey

0

这个正则表达式匹配常见格式1-(999)-999-9999及其间的任何数字。此外,该正则表达式将允许使用括号或不使用括号,并且可以使用句点空格破折号进行分隔。"^([01][- .])?(\(\d{3}\)|\d{3})[- .]?\d{3}[- .]\d{4}$"


0
  ^[0-9\-\+]{9,15}$ 

可以匹配0+0+0+0+0+0,或000000000等。

  (\-?[0-9]){7}

将匹配任意位置的特定数字及其可选连字符。

+077格式是什么意思?

这不是一个有效的格式。没有国家代码以0开头。

在+后面的数字通常应该是1到3位长的国家代码。

允许使用“+”、国家代码CC,然后是可选连字符,“0”加上两个数字,然后是下一个七个数字的连字符和数字,请尝试:

  ^\+CC\-?0[1-9][0-9](\-?[0-9]){7}$

哦,{3,3} 是多余的,可以简化为 {3}。


0
^+?\d{3}-?\d{2}-?\d{2}-?\d{3}$

你可以尝试这个……
这个怎么样?希望能有所帮助……
^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$

有没有全局的选项可以做到这一点?这样即使是0-7-7-1-2-3-4-5-6-7也能工作? - Nir
^(+?)\d{3,3}(-?)\d{2,2}(-?)\d{2,2}(-?)\d{3,3}$....两者都可以...我现在无法检查它们的准确性... - Premanshu
@Nir:如果答案不起作用,请随意分享...或者如果它们解决了你的问题,请考虑接受它们。 - Premanshu
我想要对任何情况和数字与破折号的任意组合进行操作。 - Nir

0

补充@Joe Johnston的答案,这也将被接受:

+16444444444,,241119933

(为了苹果特殊字符支持的拨入 - https://support.apple.com/kb/PH18551?locale=en_US

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?([\w\,\@\^]{1,10}\s?\d{1,10})?

注意:接受最多10位数字的分机号码。

0

针对所有电话号码格式:

/^\+?([87](?!95[5-7]|99[08]|907|94[^09]|336)([348]\d|9[0-6789]|7[01247])\d{8}|[1246]\d{9,13}|68\d{7}|5[1-46-9]\d{8,12}|55[1-9]\d{9}|55[138]\d{10}|55[1256][14679]9\d{8}|554399\d{7}|500[56]\d{4}|5016\d{6}|5068\d{7}|502[345]\d{7}|5037\d{7}|50[4567]\d{8}|50855\d{4}|509[34]\d{7}|376\d{6}|855\d{8,9}|856\d{10}|85[0-4789]\d{8,10}|8[68]\d{10,11}|8[14]\d{10}|82\d{9,10}|852\d{8}|90\d{10}|96(0[79]|17[0189]|181|13)\d{6}|96[23]\d{9}|964\d{10}|96(5[569]|89)\d{7}|96(65|77)\d{8}|92[023]\d{9}|91[1879]\d{9}|9[34]7\d{8}|959\d{7,9}|989\d{9}|971\d{8,9}|97[02-9]\d{7,11}|99[^4568]\d{7,11}|994\d{9}|9955\d{8}|996[2579]\d{8}|998[3789]\d{8}|380[345679]\d{8}|381\d{9}|38[57]\d{8,9}|375[234]\d{8}|372\d{7,8}|37[0-4]\d{8}|37[6-9]\d{7,11}|30[69]\d{9}|34[679]\d{8}|3459\d{11}|3[12359]\d{8,12}|36\d{9}|38[169]\d{8}|382\d{8,9}|46719\d{10})$/

0

JS 代码:

function checkIfValidPhoneNumber(input){
    "use strict";
    if(/^((\+?\d{1,3})?[\(\- ]?\d{3,5}[\)\- ]?)?(\d[.\- ]?\d)+$/.test(input)&&input.replace(/\D/g,"").length<=15){
        return true;
    } else { 
        return false;
    }
}

在检查电话号码方面,它可能比较原始,但它会检查输入文本是否符合E.164建议。

  1. 最大电话长度为15位数字
  2. 国家代码由1到3位数字组成,可以带加号(也可以省略)
  3. 区域(网络)代码由3到5位数字组成(如果省略国家代码,则只能省略该代码)

它允许在电话号码和区域代码周围使用一些分隔符(.-) 例如:

+7(918)000-12-34

911

1-23456-789.10.11.12

所有都符合E.164标准并经过验证。

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