这个解决方案实际上验证了数字和格式。例如:123-456-7890 是有效的格式,但不是有效的美国号码,这个答案证明了其他人不知道的地方。
如果您不希望扩展功能,请删除以下内容,包括括号:
(?:\s*(?:#|x.?|ext.?|extension)\s*(\d+)\s*)? :)
edit (addendum) 我需要在仅客户端应用程序中使用它,因此我对其进行了转换。这是给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
}
hth。
结束编辑
这是否允许扩展并适用于 .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+))?$
验证是否有尾随空格。也许在使用 .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*)?$
全部有效:
1 800 5551212
800 555 1212
8005551212
18005551212
+1800 555 1212 分机号65432
800 5551212 分机3333
#s 无效
234-911-5678
314-159-2653
123-234-5678
编辑:根据 Felipe 的评论,我已将其更新为国际版。
根据我从here 和here 中找到的有关有效全球号码的信息
这当然是作为第一道防线进行测试的。国际号码的一个重要元素是不超过 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})?
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})?
有效国际:ref 的国家名称不匹配。
+55 11 99999-5555 巴西
+593 7 282-3889 厄瓜多尔
(+44) 0848 9123 456 英国
+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 巴西
享受