我正在开发一项功能来验证用户提交的美国电话号码,该号码可以用人们通常使用的任何流行数字格式提交。到目前为止,我的代码如下:
$number = '123-456-7890';
function validate_telephone_number($number) {
$formats = array(
'###-###-####',
'(###)###-###',
'(###) ###-###',
'##########'
);
$number = trim(preg_replace('[0-9]', '#', $number));
if (in_array($number, $formats)) {
return true;
} else {
return false;
}
}
首先,此代码似乎不起作用,并在所有提交的数字上返回false。我似乎无法找到我的错误。
其次,我正在寻找一种简单的方法,只允许来自一系列特定允许区号的电话号码。有什么想法吗?
答案 0 :(得分:1)
关于你的第一个问题:
preg_replace('/[0-9]/', '#', $number)
或'/\d/'
对于第二个问题,这可能会对您有所帮助:
$areaCode = substr(preg_replace('/[^\d]/', '', $number),0 , 3);
这将通过丢弃所有其他字符来为您提供该号码的前3位数字。
我不熟悉美国区号格式,所以我对这个格式无法帮助你。
加成:
if (in_array($number, $formats)) {
return true;
} else {
return false;
}
相当于
return in_array($number, $formats);
事实上任何形式的陈述
if(<expression>){
return true;
}
else{
return false;
}
可以写为return (bool) <expr>;
,但在这种情况下,in_array
将始终返回一个布尔值,因此不需要(bool)
。
答案 1 :(得分:0)
您的代码不检查格式正确但数字无效 - 例如,在美国没有区号以0或1开头,因此可以检查。此外,您的格式不允许包含国家/地区代码 - 例如,将拒绝+15551234567。
如果您不关心格式,只想验证输入中的数字是否相当于有效的美国电话号码,您可以使用以下内容:
$clean_number = preg_replace("/[^0-9]/", '', $number);
$valid = preg_match("/^(\+?1)?[2-9][0-9]{9}$/", $clean_number);
当然,这也会接受“foo 5555555555 bar”作为有效数字 - 如果你想禁止它,请使preg_replace更具限制性(例如,只删除括号,空格和短划线)。
答案 2 :(得分:0)
如果您希望在不维护大量代码的情况下执行此操作,则可以查看此API以验证美国号码并提供多种格式https://www.mashape.com/parsify/format
答案 3 :(得分:-1)
在here中查找具有验证电话号码功能的代码项目。