删除preg_match电话号码

时间:2013-12-29 18:25:16

标签: php validation preg-match

我正在尝试检查字符串是否包含电话号码。有几种电话号码格式。见下面的列表。我试图将它们添加到preg_match检查,之后可以从字符串中删除它们。

06-12341234 - [0-9]{2}[\-][0-9]{8}
0612341234 - [0-9]{10}
+31 6 12341234 
31612341234
0031 6 12341234 - [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}
+31612341234
0031612341234 - [0-9]{11}
06 1234 1234 - [0-9]{2}[\s][0-9]{4}[\s][0-9]{4}
06-1234 1234 - [0-9]{2}[\-][0-9]{4}[\s][0-9]{4}

还有更多。但是没有更好的检查来查找电话号码并更换它们吗?下面的代码段不会从字符串中删除电话号码。

if(preg_match('/
        [0-9]{2}[\-][0-9]{8}| 
        [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}|
        [0-9]{10}|
        [0-9]{11}|
        /', $Message)){
    //URLS
    $pattern = "/
        [0-9]{2}[\-][0-9]{8}| 
        [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}|
        [0-9]{10}|
        [0-9]{11}|
        /";
    $replacement = "[removed]";
    $Message = preg_replace($pattern, $replacement, $string);
    $Score = $Score+20;
}

2 个答案:

答案 0 :(得分:0)

我认为这是使用preg_replace()的正确方法,但您不必先使用preg_match()进行检查。您可以稍后检查字符串是否相同。如果它不相同,你会做你需要的其他东西,比如增加分数。

所以你的代码看起来像这样:

$replacement = "[removed]";
$message = preg_replace('/(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/', $replacement, $string);
if ($message != $replacement) {
    $score = $score + 20;
}

注意:我在上面找到了匹配电话号码的模式,我不确定它是否适用于您的数据,您应该自己测试一下。

答案 1 :(得分:0)

尝试将字母x添加到模式的末尾:

而不是:

$pattern = '/
        [0-9]{2}[\-][0-9]{8}| 
        [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}|
        [0-9]{10}|
        [0-9]{11}|
        /';

使用此:

$pattern = '/
        [0-9]{2}[\-][0-9]{8}| 
        [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}|
        [0-9]{10}|
        [0-9]{11}|
        /x';

更好的是,定义一次模式并重复使用它:

// If the pattern is the same, there's no point in writing it twice.
// Save some time and possibly prevent errors by using the same pattern
// in each check.
$pattern = '/
        [0-9]{2}[\-][0-9]{8}| 
        [0-9]{4}[\s][0-9]{1}[\s][0-9]{8}|
        [0-9]{10}|
        [0-9]{11}|
        /x';
if (preg_match($pattern, $Message)) {
    //URLS
    $replacement = "[removed]";
    $Message = preg_replace($pattern, $replacement, $string);
    $Score = $Score+20;
}