Php 在更新数据库之前格式化与正则表达式匹配的数据
我有一个验证,它以特定的方式接受电话号码并将其转储到数据库中,但它不会以我想要的方式转换它们 例如,如果我以电话号码的形式输入Php 在更新数据库之前格式化与正则表达式匹配的数据,php,regex,Php,Regex,我有一个验证,它以特定的方式接受电话号码并将其转储到数据库中,但它不会以我想要的方式转换它们 例如,如果我以电话号码的形式输入9999999999或0999999999或+9199999999,它将以我输入的方式进入数据库 无论用户如何输入,我如何以+9199999999样式将其格式化 function validate_phone($input){ $input = trim($input); //get rid of spaces at either end if (preg
9999999999
或0999999999
或+9199999999
,它将以我输入的方式进入数据库
无论用户如何输入,我如何以+9199999999
样式将其格式化
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;
}
}
按照我的理解,您只需要在
+91
前缀前面加上最后10位数字
我们首先对正则表达式进行一个小的修改,在[789]\d{9}
周围添加括号以捕获它:
/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?([789]\d{9})$/
然后使用变量$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;
}
}
测试:
输出:
+919999999999
+919999999999
+919999999999
谢谢你的帮助。我理解逻辑,答案是正确的。还有一个问题。用户可能输入不正确的10位数字,如999999999888888877777777。9898等。这可以通过更改正则表达式来限制吗?电话号码是否有严格的表达规则?Thanks@Sabha我很想说技术上是的,尽管这实际上取决于控制数字的规则。根据复杂性,这可能真的是它自己的问题。此外,正则表达式也不总是答案。谢谢我将为此单独发布一个问题,以避免只显示在我的最后评论中的数字。
+919999999999
+919999999999
+919999999999