Nir*_*Nir 55 regex phone-number
我正在使用此模式来检查电话号码的验证
^[0-9\-\+]{9,15}$
Run Code Online (Sandbox Code Playgroud)
这对工作0771234567和+0771234567,但我希望它的作品077-1234567,并+077-1234567和+ 077-1-23-45-67和+ 077-123-45-6-7
我该怎么改变模式?
Gen*_*ent 37
请参阅此SO帖子
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
Run Code Online (Sandbox Code Playgroud)
得到支持
Joe*_*ton 21
该解决方案实际上验证了数字和格式.例如:123-456-7890是一种有效的格式,但不是有效的美国号码,这个答案证实了其他人不在的地方.
如果您不想要扩展功能,请删除以下内容,包括括号:(?:\ s*(?:#| x.?| ext.?| extension)\ s*(\ d +)\ s*)?:)
编辑 (附录)我在仅客户端应用程序中需要这个,所以我转换它.这里是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
}
Run Code Online (Sandbox Code Playgroud)
心连心. 结束编辑
这允许扩展或不扩展,并与.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+))?$
Run Code Online (Sandbox Code Playgroud)
使用或不使用尾随空格进行验证.也许在使用.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*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$
Run Code Online (Sandbox Code Playgroud)
全部有效:
1 800 5551212
800 555 1212
8005551212
18005551212
+1800 555 1212 extension65432
800 5551212转3333
#s无效
234-911-5678
314-159-2653
123-234-5678
编辑:根据菲利佩的评论我已经更新了国际.
当然,这是作为第一道防线进行测试的.国际号码的首要元素是它不超过15个字符.我没有为所有非数字写一个替换,并对结果求和.应该完成它.另外,您可能会注意到我没有将北美正则表达式与此结合使用.原因是,这个正则表达式国际将匹配北美的数字,但是,它也将接受称为无效的#,如+1 234-911-5678.为了获得更准确的结果,您也应该将它们分开.
未提及暂停和其他拨号工具,因此根据E.164无效
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
Run Code Online (Sandbox Code Playgroud)
使用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})?
Run Code Online (Sandbox Code Playgroud)
有效国际:ref的国家名称不匹配.
+55 11 99999-5555 巴西
+593 7 282-3889 厄瓜多尔
(+44)0848 9123 456 英国
+1 284 852 5500 BVI
+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}$
Run Code Online (Sandbox Code Playgroud)
这只允许+在开始时; 它需要3位数字,然后是可选的短划线,接着是6-12位数字.
请注意,原始正则表达式允许"电话号码",例如70+12---12+92,比您可能想到的更加自由.
该问题经修正后补充:
+ 077-1-23-45-67和+ 077-123-45-6-7
您现在可能需要使用支持替代方案的正则表达式系统:
^\+?[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])$
Run Code Online (Sandbox Code Playgroud)
第一种选择是七位数; 第二个是1-23-45-67; 第三是123-45-6-7.这些都共享可选加号,+后跟3位数字和可选的短划线-前缀.
以下评论提到了另一种模式:
+ 077-12-34-567
一般模式应该是什么都不清楚 - 可能是由破折号分隔的一个或多个数字; 正面和背面的数字?
^\+?[0-9]{3}-?[0-9](-[0-9]+)+$
Run Code Online (Sandbox Code Playgroud)
这将允许'+ 077-'前缀,后跟任何数字序列与破折号交替,每个破折号之间至少有一个数字,末尾没有破折号.
首先测试字符串的长度,看它是否在9到15之间.
然后使用此正则表达式验证:
^\+?\d+(-\d+)*$
Run Code Online (Sandbox Code Playgroud)
这是normal* (special normal*)*模式的另一种变体 ,normal存在\d与special存在-.
小智 5
我试过了 :
^(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}$
Run Code Online (Sandbox Code Playgroud)
我还处理了特殊的国家/地区代码,例如1-97...。这是我测试过的数字(来自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
Run Code Online (Sandbox Code Playgroud)
最初发布在这里:正则表达式以匹配标准的10位数电话号码
我有一个比较通用的正则表达式来允许用户只输入数字,+,-,whitespace和()。它尊重括号的平衡,并且在符号后总是有一个数字。
^([+]?[\s0-9]+)?(\d{3}|[(]?[0-9]+[)])?([-]?[\s]?[0-9])+$
false, ""
false, "+48 504 203 260@@"
false, "+48.504.203.260"
false, "+55(123) 456-78-90-"
false, "+55(123) - 456-78-90"
false, "504.203.260"
false, " "
false, "-"
false, "()"
false, "() + ()"
false, "(21 7777"
false, "+48 (21)"
false, "+"
true , " 1"
true , "1"
true, "555-5555-555"
true, "+48 504 203 260"
true, "+48 (12) 504 203 260"
true, "+48 (12) 504-203-260"
true, "+48(12)504203260"
true, "+4812504203260"
true, "4812504203260
Run Code Online (Sandbox Code Playgroud)
这是埃塞俄比亚电话号码的正则表达式。对于我的埃塞俄比亚开发人员;)
phoneExp = /^(^\+251|^251|^0)?9\d{8}$/;
Run Code Online (Sandbox Code Playgroud)
它匹配以下内容(在开始和结束位置限制任何不需要的字符)