电话validation正则expression式

我正在使用这种模式来检查电话号码的validation

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

这是适用于0771234567+0771234567 ,但我希望它工作077-1234567+077-1234567和+ 077-1-23-45-67和+ 077-123-45-6-7

我应该改变什么模式?

请参阅此SO贴子

jquery中用于电话号码的正则expression式示例

 /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/ 
  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

被支持

编辑 (附录)我需要在客户端只有应用程序,所以我转换它。 这里是JavaScript的人:

 var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i; if (myPhoneRegex.test(phoneVar)) { // Successful match } else { // Match attempt failed } 

心连心。 结束编辑

这允许扩展或不与.NET一起工作

 (?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$ 

validation是否有尾随空格。 也许当使用.NETvalidation和修剪服务器端使用这个稍微不同的正则expression式:

 (?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$ 

全部有效:

1 800 5551212

800 555 1212

8005551212

18005551212

+1800 555 1212分机65432

800 5551212 ext3333

无效的#

234-911-5678

314-159-2653

123-234-5678


编辑:根据菲利佩的评论,我已经更新了这个国际。

根据我在这里和这里可以find有关全球有效数字的信息

这当然是作为第一道防线testing的。 国际号码的一个主要元素是它不超过15个字符。 我没有写一个replace所有的非数字和总和的结果。 这应该完成。 另外,您可能会注意到我没有将北美正则expression式与这个结合起来。 原因是这个国际正则expression式会匹配北美的数字,但是,它也会接受已知的无效#+1 234-911-5678 。 为了更准确的结果,你应该分开它们。

没有提及暂停和其他拨号工具,因此按照E.164的规定是无效的

 \(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? 

用1-10个字母扩展名和1-6位数字扩展名:

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

有效的国际:国际名称的参考其不匹配。

+55 11 99999-5555 巴西

厄瓜多尔 +593 7 282-3889

(+44)0848 9123 456 UK

+1 284 852 5500 英属维尔京群岛

+1 345 9490088 大开曼岛

比利时 +32 2 702-9200

亚太地区 +65 6511 9266

+86 21 2230 1000 上海

+9124 4723300 印度

+821012345678 韩国

并为您的延伸乐趣

+55 11 99999-5555 ramal 123 巴西

+55 11 99999-5555 foo786544 巴西

请享用

考虑:

 ^\+?[0-9]{3}-?[0-9]{6,12}$ 

这只允许在开始时+ ; 它需要3位数字,后面跟着一个可选的破折号,后面再加6-12位数字。

请注意,原始的正则expression式允许“电话号码”,比如70+12---12+92 ,这比你想象的要宽松一些。


这个问题作了修改,增加:

+ 077-123-45-67和+ 077-123-45-6-7

您现在可能需要使用支持替代方法的正则expression式系统:

 ^\+?[0-9]{3}-?([0-9]{7}|[0-9]-[0-9]{2}-[0-9]{2}-[0-9]{2}|[0-9]{3}-[0-9]{2}-[0-9]-[0-9])$ 

第一个select是七位数; 二是1-23-45-67; 三是123-6-7。 这些全部共享可选的加+后跟3位数字和可选的短划线前缀。

下面的评论提到另一种模式:

+ 077-12-34-567

一般模式应该是什么都不清楚 – 可能是一个或多个用破折号分隔的数字; 数字在前面和后面?

 ^\+?[0-9]{3}-?[0-9](-[0-9]+)+$ 

这将允许“+ 077-”前缀,后面是任何序列的数字交替使用短划线,每个短划线之间至less有一个数字,最后没有短划线。

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

所以首先是一个数字或一个+,然后一些数字或 –

首先testingstring的长度,看它是否在9到15之间。

然后使用这个正则expression式来validation:

 ^\+?\d+(-\d+)*$ 

这是normal* (special normal*)*模式的又一种变化, normal* (special normal*)* normal\dspecial情况。

我试过了 :

 ^(1[ \-\+]{0,3}|\+1[ -\+]{0,3}|\+1|\+)?((\(\+?1-[2-9][0-9]{1,2}\))|(\(\+?[2-8][0-9][0-9]\))|(\(\+?[1-9][0-9]\))|(\(\+?[17]\))|(\([2-9][2-9]\))|([ \-\.]{0,3}[0-9]{2,4}))?([ \-\.][0-9])?([ \-\.]{0,3}[0-9]{2,4}){2,3}$ 

我照顾特殊的国家代码,如1-97 …以及。 以下是我testing的数据(来自Puneet Lamba和MCattle):

 ***** PASS ***** 18005551234 1 800 555 1234 +1 800 555-1234 +86 800 555 1234 1-800-555-1234 1.800.555.1234 +1.800.555.1234 1 (800) 555-1234 (800)555-1234 (800) 555-1234 (800)5551234 800-555-1234 800.555.1234 (+230) 5 911 4450 123345678 (1) 345 654 67 +1 245436 1-976 33567 (1-734) 5465654 +(230) 2 345 6568 ***** CORRECTLY FAILING ***** (003) 555-1212 (103) 555-1212 (911) 555-1212 1-800-555-1234p 800x555x1234 +1 800 555x1234 ***** FALSE POSITIVES ***** 180055512345 1 800 5555 1234 +867 800 555 1234 1 (800) 555-1234 86 800 555 1212 

最初发布在这里: 正则expression式匹配标准的10位电话号码

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

你可以试试这个….

这个怎么样…希望这有助于…

 ^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$ 
  ^[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}。

 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"); } 

这个正则expression式匹配任何数字 ,通用格式1-(999)-999-9999之间的任何数字 。 此外,正则expression式将允许大括号或没有括号和分离与周期空间破折号"^([01][- .])?(\(\d{3}\)|\d{3})[- .]?\d{3}[- .]\d{4}$"

 ^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$ 

匹配以下情况:

123-456-7890

(123)456-7890

123 456 7890

123.456.7890

+91(123)456-7890