我正试图从一组数据中提取电话号码。它必须能够从每个国家提取国际和本地号码。
我为它制定的规则是: 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}
事实是,它实际上并没有拾取带有空格或连字符的数字。 可以有人给我一些建议吗?
答案 0 :(得分:1)
\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
然后分别处理并验证这些字符串,最好在删除所有标点符号/空格后(+除外)。
答案 1 :(得分:0)
我不确定是否有可能创建一个匹配每个国家/地区的正则表达式 - 某些国家/地区的规则存在冲突。
完全有可能一个有效的国际号码中包含两个有效的本地号码。
您可能希望从查看此问题的一些答案开始:
A comprehensive regex for phone number validation
如果你想为每个国家创造一些明确的东西,祝你好运,你可能需要花一些时间来制定一些技术标准......
即。 177
和186-0039-011-81-90-1177-1177
都是同一国家/地区的有效电话号码