PHP中检测错误电话号码的正则表达式

PHP中检测错误电话号码的正则表达式,php,regex,phone-number,Php,Regex,Phone Number,我正在尝试构建一个正则表达式来检测错误的电话号码,并用原始号码替换它们。我有电话号码,在带有文本(带有html标记)的文本字段中有错误的号码(出于某种原因,网站用户喜欢在号码之间插入各种字符)。以下是我正在使用的方法,它在大多数情况下都很有效,但并非所有情况下都有效: $phone = '0888123123'; $text = 'Some html text with variants of the phone number in wrong format - 0~8~8~8~1~2~3~1

我正在尝试构建一个正则表达式来检测错误的电话号码,并用原始号码替换它们。我有电话号码,在带有文本(带有html标记)的文本字段中有错误的号码(出于某种原因,网站用户喜欢在号码之间插入各种字符)。以下是我正在使用的方法,它在大多数情况下都很有效,但并非所有情况下都有效:

$phone = '0888123123';
$text = 'Some html text with variants of the phone number in wrong format - 
0~8~8~8~1~2~3~1~2~3
0.8.8.8.1.2.3.1.2.3
0 8 8 8 1 2 3 1 2 3
0888-123-123
The last format does not work!';

preg_match_all('/('.implode('[\D]+', str_split($phone)).')/i', strip_tags($text), $matches);

if (count($matches) > 0) {
   foreach($matches as $value) {
      $text = str_replace($value, $phone, $text);
   }
}
我尝试在数字之间查找任何非数字字符,但仅当此非数字字符位于所有数字之间(即0.8.8.8.1.2.3.1.2.3)时才有效,但它与0888-123-123不匹配。在这个正则表达式中是否添加了一些内容来捕获其余的情况

[^\d\n]
你可以试试这个。看演示


更容易检测电话号码,因为它有一定数量的数字。。。或者使用phone no carrier lookup api(ex),以便您可以检查手机是否没有有效的运营商,我只在phone字段中进行检查。在文本字段中,我无法检测到它,因为用户将它放在HTML文本中。不,你不能这样做。。或者,唯一的可能性是,您的文本应该只包含电话号码以外的字母,这样您就可以提取数字,然后检查它们是否有效,或者是否只需等待一分钟,我可以创建一个单独的示例,您需要将
[\D]+
更改为
[\D]*
。因为你想替换文本,即使没有任何内容,也可以使用一些数字。。。所以
*
,意思是0或更多。而
+
意味着一个或多个…它可以工作!非常感谢,我不知道这个工具,看起来非常适合测试