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