我有一个检查所有英国号码的正则表达式。几乎所有英国的数字都是11位数字,但英国有一些数字从08开始有10位数字。
非工作号码的例子如下:
0800 757757,0800 200400,0800 444252,0870 591 285.
如何扩展此正则表达式以检查上面的10位数?
这是正则表达式:
^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$
答案 0 :(得分:0)
好吧,为了匹配和验证列出wikipedia的pasterns,你需要编写一个非常复杂的正则表达式。但是,对于上面列出的简单案例,请尝试
(08(00(\s*\d\s*){3,6}|7(\s*\d\s*){7}))
根据您的样本编号,它将匹配
0800 757757
0800 200400
0800 444252
0870 591 285
答案 1 :(得分:0)
我不知道你要解决的是什么特别的问题,但这是我的5便士。
如果您尝试验证用户输入,那么您的方法与validating an email address一样错误。如果用户为了好玩而输入(完全有效!)他的前伴侣号码会怎么样?或意外错误输入最后一位数字?您如何处理带有后缀的数字,以绕过swichboards直接连接到020 11112222,,1234
,其中1234
是分机号码?
如果您确实需要确定给定的号码是否有效且属于特定用户,请发送带有某个唯一号码的文本,并要求用户稍后重新输入该号码。
另一方面,如果您试图从某些文本中获取电话号码,那么您将永远不会100%准确。如果可能的话,在单个正则表达式中处理所有情况将非常困难。您需要处理+44(0)20 xxxx yyyy
,44 020 xxxxyyyyy
等数字。准备好同时得到误报和否定。