preg_replace无法正常工作!

时间:2009-12-26 22:49:48

标签: php codeigniter preg-replace

这是我的Codeigniter功能:

function edit_phone($phone)
{
            if (preg_match('/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/', $phone))
            {
                return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone); 
            }
            else
            {
               $this->CI->validation->set_message('phone', "This must be a 10-digit USA phone number.");
                    return FALSE;       
            }
}

这会验证/检查输入,但不会在db中重新格式化。

验证很棒!但为什么这不会返回标准电话号码?!

2 个答案:

答案 0 :(得分:3)

我认为问题在于它只能使用格式为1234567890的数字,但是基于preg_match()调用中的正则表达式,Kevin还希望能够容纳如下数字:

  • (123)4567890
  • (123)456 7890
  • 123-456-7890

如果是这样,preg_replace()中的正则表达式必须类似于......

preg_replace('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/', "$1-$2-$3", $phone)

答案 1 :(得分:2)

您能否提供您尝试填写的示例数据?

我使用了以下代码:

$phone = "1234567890";
echo preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone);

得到了:

123-456-7890

这是绝对正确的,据我所知。