电话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
是\d
和special
情况。
我试过了 :
^(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