我正在尝试检查字符串是否包含电话号码。有几种电话号码格式。见下面的列表。我试图将它们添加到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;
}
答案 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;
}