Php 从文本中匹配电话号码

Php 从文本中匹配电话号码,php,regex,phone-number,Php,Regex,Phone Number,我有php中的正则表达式,它匹配一些文本中非常好的电话号码 ([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9]) 良好匹配:041797-991或+38628055291或+386(0)41718827 不匹配:000/000/13(如果前面有三个零,可能不匹配?) 我怎样才能删除这个不好的匹配?您可以使用一个 一个类似的例子也出现在大量的现有问题中,只要浏览一下就可以了 或者,您可以直接循环匹配结果,并根据新标准对其进行筛选。为什么不简单地循环所有数字,然后验

我有php中的正则表达式,它匹配一些文本中非常好的电话号码

([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])    
良好匹配:
041797-991
+38628055291
+386(0)41718827

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

我怎样才能删除这个不好的匹配?

您可以使用一个

一个类似的例子也出现在大量的现有问题中,只要浏览一下就可以了


或者,您可以直接循环匹配结果,并根据新标准对其进行筛选。

为什么不简单地循环所有数字,然后验证(删除所有无关字符):

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

这将修复您的正则表达式:

(?!(?:0[ /-]*){2,})([\+|0](?:[0-9/\-\(\) ] ?){7,25}[0-9])
由于您已经对表达式进行了处理,以允许在数据集中看到某些字符,而不是从头开始编写新字符,因此我使用了您的表达式

开头添加的短语是负面展望

(?!(?:0[ /-]*){2,})
翻译:在比赛开始前,我们不希望看到{zero(可选后跟空格、斜杠或连字符)}出现两次或更多次

如果两个零实际上可以,将2改为3。还可以根据数据的外观调整[/-]中的字符


我根据你的样本数据检查了正则表达式。它是有效的。

thx,这是我的想法,但我想知道是否有可能在正则表达式中实现if/loop。我尝试过它,但在我的示例中无法实现。也许你知道如何将它附加到我的正则表达式中?所以它应该是这样的:(?!000)(\+\1240](?:[0-9/\-()]){7,25}[0-9])。我真的不熟悉正则表达式。这看起来不错,应该会给你想要的效果。请注意,
[\+\124; 0]
应该是
[+0]
,并且可能仍然会干扰断言。嗯,但是这会消除00387?如果它包含三个000,我想删除它。谢谢。你本可以早点告诉我的。然后添加一个
\b
锚定匹配的数字,以便断言可以看到所有匹配的数字。
(?!(?:0[ /-]*){2,})