我有一个验证,它以特定方式接受电话号码并将它们转储到数据库中,但它不会按照我想要的方式转换它们。
例如,如果我输入9999999999
或09999999999
或+919999999999
作为电话号码,则会按照我输入的方式进入数据库。
如何以+919999999999
样式格式化它而不管用户输入的方式如何?
function validate_phone($input){
$input = trim($input); //get rid of spaces at either end
if (preg_match('/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$/',$input) == 1){
return $input;
}else{
return false;
}
}
答案 0 :(得分:2)
我理解它的方式,你只需要前面加+91
前缀的最后10位数字。
我们首先对正则表达式做一个小修改,在[789]\d{9}
周围添加括号来捕获它:
/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?([789]\d{9})$/
然后我们使用preg_match
的第三个参数来检索捕获,使用变量$m
:
preg_match('/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?([789]\d{9})$/', $input, $m)
最后10位数字将包含在$m[2]
中,然后我们返回前缀为+91
的内容:
function validate_phone($input){
$input = trim($input); //get rid of spaces at either end
if (preg_match('/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?([789]\d{9})$/', $input, $m) == 1){
return '+91'.$m[2];
}else{
return false;
}
}
测试:
echo "\n".validate_phone('9999999999');
echo "\n".validate_phone('09999999999');
echo "\n".validate_phone('+919999999999');
输出:
+919999999999
+919999999999
+919999999999