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 に答える