0

私は、データベースに挿入される電話番号が、挿入方法に関係なく、すべて同じ規則に従うようにしようとしています。

そう(123) 456.7890123.456.7890

両方ともデータベースに入ることになります123-456-7890

整数以外のすべての文字を削除して、次の123.456.7890ように変換し1234567890て再フォーマットできる関数が必要だと考えています。xxx-xxx-xxxx

おそらくこれについては間違っていますが、phpはこれらの線に沿って何かを達成する方法を持っている必要があると考えているので、助けていただければ幸いです。

4

4 に答える 4

1
// Remove any non-number character
$str = preg_replace('/[^\d]/', '', $str);
// Insert dashes
$str = preg_replace('/(\d)(?=(\d{4}|\d{7})$)/', '$1-', $str);

これがフィドルです:http://codepad.viper-7.com/pQlwVw

于 2013-02-01T18:27:12.743 に答える
1

些細な正規表現でそれができます。

$nums = preg_replace("/\D/","",$input);

理想的には、それをそのように保存し、出力でのみフォーマットする必要があります。これは次のように行われます。

$output = preg_replace("/(...)(...)(....)/","$1-$2-$3",$nums);
于 2013-02-01T18:27:47.407 に答える
1

このようなものは機能します(10桁の文字列を電話番号にフォーマットする方法から盗まれましたか?

$phone = preg_replace("/[^0-9]/", "", $phone);
echo "(".substr($phone, 0, 3).") ".substr($phone, 3, 3)."-".substr($phone,6);
于 2013-02-01T18:27:55.713 に答える
1

これは、7桁または10桁の数値の正規表現であり、拡張子が許可されています。区切り文字は、スペース、ダッシュ、またはピリオドです。

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

または、スレッジハンマーアプローチを使用することもできます。数値以外のものをすべて取り除き、心ゆくまでフォーマットします。

于 2013-02-01T18:28:28.113 に答える