手机验证正则表达式

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帖子

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

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

得到支持

  • 这允许非法/无效#s,包括以下234-911-5678和314-159-2653和123-234-5678 (2认同)

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 巴西

请享用

  • +31 6 11 11 11 11(荷兰)或使用“00”代替“+”,因此如果您也想覆盖这些数字,您可以使用扩展版本:/\(?\+?[0- 9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{2,5} ?-?[0-9]{2,5}(?-?[0-9]{2 ,5})??(\w{1,10}\s?\d{1,6})?/ (2认同)

Jon*_*ler 8

考虑:

^\+?[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-'前缀,后跟任何数字序列与破折号交替,每个破折号之间至少有一个数字,末尾没有破折号.


fge*_*fge 5

首先测试字符串的长度,看它是否在9到15之间.

然后使用此正则表达式验证:

^\+?\d+(-\d+)*$
Run Code Online (Sandbox Code Playgroud)

这是normal* (special normal*)*模式的另一种变体 ,normal存在\dspecial存在-.


Mat*_*yr' 5

/^[0-9\+]{1,}[0-9\-]{3,15}$/
Run Code Online (Sandbox Code Playgroud)

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


小智 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位数电话号码


har*_*eri 5

我有一个比较通用的正则表达式来允许用户只输入数字,+-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)


End*_*yas 5

这是埃塞俄比亚电话号码的正则表达式。对于我的埃塞俄比亚开发人员;)

phoneExp = /^(^\+251|^251|^0)?9\d{8}$/;
Run Code Online (Sandbox Code Playgroud)

它匹配以下内容(在开始和结束位置限制任何不需要的字符)

  • +251912345678
  • 251912345678
  • 0912345678
  • 912345678

您可以在此站点regexr上对其进行测试