2014-09-11 59 views
0

我想建立一个正则表达式来检测错误的电话号码并将它们替换为原始号码。我有电话号码,并在文本字段与文本(与html标签)是错误的数字(网站的用户喜欢因为某种原因在数字之间插入各种字符)。下面是我在用它工作在大多数情况下,很好,但还不是全部:正则表达式来检测PHP中的错误电话号码

$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。在这个正则表达式中是否还有一些补充来捕获其他案例?

+0

其容易检测出手机内无数据类型为int有一定的位数...或使用手机没有载体查找API(例如http://www.telapi.com/docs/api/rest/运营商服务/运营商查询/),以便您可以检查是否有电话没有有效的承运人 – 2014-09-11 08:16:20

+0

我这样做,但在手机领域。在文本字段中,我无法检测到它,因为用户将其放入HTML文本中。 – 2014-09-11 08:21:46

+0

不,你不能这样做..或唯一的可能性是,你的文本应该只包含除电话号码以外的其他字母,以便你可以提取数字,并检查他们是否有效的天气 – 2014-09-11 08:25:16

回答

0
[^\d\n] 

您可以试试看。

http://regex101.com/r/nB2lL9/6

+0

它的工作原理!非常感谢,我不知道这个工具,看起来真棒测试 – 2014-09-11 08:22:18