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