我正在使用此模式检查电话号码的验证
^[0-9\-\+]{9,15}$
适用于0771234567
和+0771234567
,
但我希望它适用于077-1234567
和+077-1234567
以及+ 077-1-23-45-67和+ 077-123-45-6-7
我应该在模式中改变什么?
答案 0 :(得分:36)
请参阅此SO帖子
example of a regular expression in jquery for phone numbers
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
答案 1 :(得分:21)
此解决方案实际验证了数字和格式。例如: 123-456-7890是一种有效的格式,但不是有效的美国号码,这个答案证实了其他人不在的地方。
如果您不想要扩展功能,请删除以下内容,包括括号: (?:\ S *(?:?#| X | EXT |扩展名)\ 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
}
第h。 结束编辑
这允许扩展或不使用.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 extension65432
800 5551212 ext3333
无效#s
234-911-5678
314-159-2653
123-234-5678
编辑:根据Felipe的评论,我已将此更新为国际。
当然,这是第一道防线。国际号码的首要元素是它不超过15个字符。我没有为所有非数字写一个替换,并对结果求和。应该完成它。另外,您可能会注意到我没有将北美正则表达式与此结合使用。原因是这个国际正则表达式将匹配北美数字,但是,它也会接受已知的无效{{1}比如#
。为了获得更准确的结果,您也应该将它们分开。
未提及暂停和其他拨号工具,因此根据E.164
无效+1 234-911-5678
1-10个字母用于分机和1-6位数字分机:
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
Valid International: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 巴西
享受
答案 2 :(得分:8)
考虑:
^\+?[0-9]{3}-?[0-9]{6,12}$
这只允许+
开头;它需要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])$
第一种选择是七位数;第二个是1-23-45-67;第三是123-45-6-7。这些都共享可选的加号+
,后跟3位数字和可选的短划线-
前缀。
下面的评论提到了另一种模式:
+ 077-12-34-567
一般模式应该是什么都不清楚 - 可能是一个或多个用短划线分隔的数字;正面和背面的数字?
^\+?[0-9]{3}-?[0-9](-[0-9]+)+$
这将允许'+ 077-'前缀,后跟任何数字序列与破折号交替,每个破折号之间至少有一个数字,末尾没有破折号。
答案 3 :(得分:5)
首先测试字符串的长度,看它是否在9到15之间。
然后使用此正则表达式验证:
^\+?\d+(-\d+)*$
这是normal* (special normal*)*
模式的另一种变体,normal
为\d
,special
为-
。
答案 4 :(得分:5)
/^[0-9\+]{1,}[0-9\-]{3,15}$/
所以首先是数字或+,然后是一些数字或 -
答案 5 :(得分:4)
我试过了:
^(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这样的特殊国家代码。以下是我测试过的数字(来自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
最初发布在此处:Regular expression to match standard 10 digit phone number
答案 6 :(得分:4)
我有一个更通用的正则表达式,允许用户仅输入数字+
,-
,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
答案 7 :(得分:3)
^(\+\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
答案 8 :(得分:1)
这是埃塞俄比亚电话号码的正则表达式。对于我的埃塞俄比亚开发人员;)
phoneExp = /^(^\+251|^251|^0)?9\d{8}$/;
它与以下内容匹配(在开始和结束位置限制所有不需要的字符)
您可以在此网站regexr.
上对其进行测试答案 9 :(得分:0)
此正则表达式将任意数字与通用格式1-(999)-999-9999以及介于两者之间的任何内容匹配。此外,正则表达式允许大括号或没有大括号和分隔与期间,空间或破折号。 "^([01][- .])?(\(\d{3}\)|\d{3})[- .]?\d{3}[- .]\d{4}$"
答案 10 :(得分:0)
JS代码:
function checkIfValidPhoneNumber(input){
"use strict";
if(/^((\+?\d{1,3})?[\(\- ]?\d{3,5}[\)\- ]?)?(\d[.\- ]?\d)+$/.test(input)&&input.replace(/\D/g,"").length<=15){
return true;
} else {
return false;
}
}
它在检查电话号码方面可能很原始,但它会检查输入文本是否符合 E.164 建议。
它允许在电话号码和区域代码周围使用一些分隔符 (.-) 例如:
<块引用>+7(918)000-12-34
911
1-23456-789.10.11.12
全部符合 E.164 并经过验证
答案 11 :(得分:0)
/^(([+]{0,1}\d{2})|\d?)[\s-]?[0-9]{2}[\s-]?[0-9]{3}[\s-]?[0-9]{4}$/gm
经过测试
+94 77 531 2412
+94775312412
077 531 2412
0775312412
77 531 2412
//不匹配
77-53-12412
+ 94-77-53-12412
077 123 12345
77123 12345
答案 12 :(得分:0)
尝试一下
\+?\(?([0-9]{3})\)?[-.]?\(?([0-9]{3})\)?[-.]?\(?([0-9]{4})\)?
它符合以下情况
有关模式CLICKME
的进一步说明答案 13 :(得分:0)
除了@Joe Johnston的答案,这还将接受:
+16444444444,,241119933
(Apple对拨入的特殊字符支持所必需-https://support.apple.com/kb/PH18551?locale=en_US)
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?([\w\,\@\^]{1,10}\s?\d{1,10})?
注意:扩展名最多接受10位数字
答案 14 :(得分:0)
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");
}
答案 15 :(得分:0)
^[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}。
答案 16 :(得分:0)
^+?\d{3}-?\d{2}-?\d{2}-?\d{3}$
你可以试试这个......
这个怎么样......希望这会有所帮助...
^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$