我在试着从一组数据中提取电话号码。它必须能够从每个国家提取国际和本地号码。
我为它制定的规则是: 1.查找国际符号,表示它是具有有效分机(从+1到+999)的国际拨号号码。2.如果存在加号,请确保下一个字符是数字。3.如果没有,请查看长度以验证其长度是否在7到10位之间。4.如果数字被连字符(-)或空格分割(通过国际标准正确),请确保它们之间的位数为3或4
我得到的var是:
\+(?=[1-999])(\d{4}[0-9][-\s]\d{3}[0-9][-\s]\d{4}[0-9])|(\d{7,11}[0-9])这是针对国际的,而本地搜索是\d{7,10}
问题是,它实际上不会提取包含空格或连字符的数字。有人能给我一些建议吗?
发布于 2010-10-21 05:00:18
\d已经意味着“数字”,所以你不应该在它后面放另一个[0-9] (意思是一样的)。
同样,[1-999]也不是你想的那样。它实际上匹配1到9之间的一(1)位数字。您可能想要\d{1,3},尽管它也会匹配0。
那么,您只允许一种划分块的变体(4-3-4) -为什么?这不会匹配很多有效的电话号码。
我会提出以下建议:
使用正则表达式\+?(?=\d)[\d\s-]{7,13}\b搜索字符串,以获取任何远程看起来像电话号码的内容。也许您还想在允许的字符列表中包括圆括号和斜杠:\+?(?=\d)[\d\s/()-]{7,14}\b
然后分别处理和验证这些字符串,最好在删除所有标点符号/空格(除了+)之后。
发布于 2010-10-21 05:02:07
我不确定是否有可能创建一个匹配每个国家的正则表达式--一些国家有相互冲突的规则。
例如,在一个有效的国际号码中包含两个有效的本地号码是完全可能的。
你可能想先看看这个问题的一些答案:
A comprehensive regex for phone number validation
如果你想为每个国家创建一些明确的东西,祝你好运,你可能需要花一些时间学习一些技术标准……
即177和186-0039-011-81-90-1177-1177都是同一国家的有效电话号码
https://stackoverflow.com/questions/3982186
复制相似问题