我在php中有正则表达式,可以匹配来自某些文本的非常好的电话号码。
([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])
良好匹配:041 797 - 991
或+386 2 80 55 291
或+386 (0)41 718 827
错误匹配:000/000/13
(如果它前面有三个零,可能不匹配,可能吗?)
我怎么能删除这个糟糕的比赛?
答案 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更改为三。同时调整[/ - ]内的字符,具体取决于数据的样子。
我根据您的示例数据检查了正则表达式。它有效。