在更新数据库之前格式化正则表达式匹配的数据

时间:2015-09-23 17:29:30

标签: php regex

我有一个验证,它以特定方式接受电话号码并将它们转储到数据库中,但它不会按照我想要的方式转换它们。

例如,如果我输入999999999909999999999+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;
    }
}

1 个答案:

答案 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