匹配文本中的电话号码

时间:2011-11-04 14:18:16

标签: php regex phone-number

我在php中有正则表达式,可以匹配来自某些文本的非常好的电话号码。

([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])    

良好匹配:041 797 - 991+386 2 80 55 291+386 (0)41 718 827

错误匹配:000/000/13(如果它前面有三个零,可能不匹配,可能吗?)

我怎么能删除这个糟糕的比赛?

3 个答案:

答案 0 :(得分:1)

您可以使用negative assertion (?!...)

类似的例子也出现在php regex match phone number的众多现有问题中,只是浏览一下。

或者您可以循环搜索匹配结果并按新条件过滤它们。

答案 1 :(得分:1)

为什么不简单地遍历所有数字然后验证(删除所有无关的字符):

preg_match_all("/\d/",$phone_number,$array);
// $array[0] will be an array of each digit

然后,您可以根据长度进行验证(例如,确定它是否具有国家/地区代码,并根据存储的数组或表格进行检查)。

答案 2 :(得分:0)

这可以修复你的正则表达式:

(?!(?:0[ /-]*){2,})([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])

由于您已经处理了表达式以允许您在数据集中看到的某些字符,而不是从头开始编写新字符,因此我与您合作。

开头添加的短语是否定前瞻。

(?!(?:0[ /-]*){2,})

翻译:展望比赛的开始,我们不希望看到{零(可选地后跟字符,例如空格,斜线或连字符)}两次或更多次。

如果两个零实际上没问题,请将2更改为三。同时调整[/ - ]内的字符,具体取决于数据的样子。

我根据您的示例数据检查了正则表达式。它有效。