我正组合正则表达式来验证电话号码。理想情况,将处理国际格式,但它必须处理成美国格式,以下:
• 1-234-567-8901
• 1-234-567-8901 x1234
• 1-234-567-8901 ext1234
• 1 (234) 567-8901 1(234-rrb- 567-8901
• 1.234.567.8901
• 1/234/567/8901 1 / 234 / 567 / 8901
• 12345678901
希望有人能提供更好的方法。
更好的方法看这里...
只是去掉输入中的所有非数字字符(除了“ x”和前导的“ + ”符号) ,注意,因为英国人倾向于用非标准格式写数字+44 (0) ... 当被要求使用国际前缀时(在这种特殊情况下,你应该完全去掉(0))。
然后,你会得到这样的值:
12345678901
12345678901x1234
345678901x1234
12344678901
12345678901
12345678901
12345678901
+4112345678
+441234567890
然后显示的时候,格式化。例如:
1 (234) 567-8901
1 (234) 567-8901 x1234
事实上,北美有一种规范,叫 NANP
。
你需要明确指定你想要什么。 什么是分隔符? 空格、破折号和句号? 一个分隔符(例如 + 0.111-222.3333)可以混合吗?如何处理扩展(例如,111-222-3333 x4444) ? 特殊号码怎么样,比如911?区号是可选的还是不可选的?
下面是一个7位或10位数的正则表达式,允许扩展,分隔符是空格、破折号或句号:
^(?:(?:\+?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+))?$
.*
如果用户想给你他的电话号码,就会给你。如果他不想,那么强迫他输入一个有效的号码将会把他送到竞争对手的网站或者让他输入一个适合你的正则表达式的随机字符串。
以下任何一项是网站上的有效条目:
"123 456 7890 until 6pm, then 098 765 4321" "123 456 7890 or try my mobile on 098 765 4321" "ex-directory - mind your own business"