0

这是我的 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;       
            }
}

这可以验证/检查输入,但不会在数据库中重新格式化它。

验证很棒!但是为什么这不返回一个标准的电话号码呢?!

4

2 回答 2

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)

于 2009-12-26T23:18:11.743 回答
2

您能给我们提供您尝试填写的示例数据吗?

我使用了以下代码:

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

并得到:

123-456-7890

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

于 2009-12-26T23:01:52.773 回答