[英]How to update this PHP regex to not allow more than 10 digits in a phone number?
我正在使用以下正则表达式来确保输入有效的电话号码。 如果输入的位数超过10,则当前不会标记错误。
如何解决?
public function phoneNumber($value) {
if (preg_match("/^\(?[0-9]{3}\)? *-? *[0-9]{3} *-? *[0-9]{4}$/", $value)) {
return true;
}
return false;
}
这是一个当前不应该显示为有效电话号码的测试用例:
35353535355535555555
如果您只对数字感兴趣,则可以过滤掉其他所有内容并检查结果:
public function phoneNumber($value) {
$filtered = preg_replace("/\D/","",$value);
return strlen($filtered) == 10;
}
过滤掉外国数字或带有扩展名的数字不是一个好主意。 这是我用于转换CRM注入特定格式的通用数字的示例。 包括垃圾邮件评分。
<?php
function phoneNumber($value) {
$phoneScore = 0;
$numbers = preg_replace('![^0-9]!','',$value);
//if it's too small to be a US number, then ramp it up.
if (!empty($value)&&(strlen($numbers) < 10)){
$phoneScore = $phoneScore + 3;
} elseif (empty($value)){
$phoneScore = $phoneScore + 10;
}
return $phoneScore;
}
$numbers = array(
'(911 -535 -3535',
'800.555.1212',
'800 458 2180',
'800 - 458 2180',
'800 - 458-2180',
'',
'800-555-1212 ext# 212',
'+49 (0)69 974640',
'+86 (021) 5466-2808',
'+66 (02) 261-3525',
'+44 (020) 7626-0224',
'123456',
);
$patterns = array('![^0-9xX#+]!','!-+!','!-?[xX#]-?!','!#+!','!#!','!^-!');
$replacements = array("-","-",'#','#',' #','');
foreach ($numbers as $value){
$score = phoneNumber($value);
$clean_num = preg_replace($patterns,$replacements,$value);
echo "$value = Score $score.<br />\n Cleaned Number = $clean_num<br />\n<br />\n";
}
?>
输出看起来像这样:
(911 -535 -3535 =得分0。清除数字= 911-535-3535
800.555.1212 =得分0.清除数量= 800-555-1212
800 458 2180 =得分0。清除数量= 800-458-2180
800-458 2180 =得分0。清除数字= 800-458-2180
800-458-2180 =得分0。清除数字= 800-458-2180
=得分10。清除数量=
800-555-1212分机号212 =分数0.已清除的号码= 800-555-1212#212
+49(0)69 974640 =得分0。清除数量= + 49-0-69-974640
+86(021)5466-2808 =得分0.清除数量= + 86-021-5466-2808
+66(02)261-3525 =得分0.清除数量= + 66-02-261-3525
+44(020)7626-0224 =得分0.清除数量= + 44-020-7626-0224
123456 =得分3。清除数字= 123456
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.