1

電話番号を入力することになっているユーザー向けの入力があります。問題は、電話番号にハイフンとスペースを入れて書く人がいるということです。入力をフィルターに通して、そのようなものを削除し、数字のみをデータベースに保存したいと考えています。

空白と特殊文字に対して str_replace() を実行できると考えました。ただし、他のすべてを削除するのではなく、数字だけを選択する方が良いと思います。これについて「ホワイトリスト」という言葉を聞いたことがあると思います。

PHPでこれを解決する方向を教えてください。

:「0333 452-123-4」と入力すると「03334521234」となる

ありがとう!

4

4 に答える 4

5

多くの口語や地域の違いがあるため、これは重要な問題です。Java を使用して電話番号を国際形式 (E.164) に変換する最良の方法は何ですか? を参照してください。Java ですが、同じルールが適用されます。

より完全な機能が必要でない限り、シンプルに保つことをお勧めします。有効な正規表現のリストを作成し、一致が見つかるまで入力をそれぞれに対してチェックします。

本当にシンプルにしたい場合は、数字以外を削除するだけです:

$phone = preg_replace('![^\d]+!', '', $phone);

ちなみに、数字だけを取り出すということは、定義上、それ以外をすべて削除することと同じです。別のことを意味する場合は、それを言い換えるとよいでしょう。

于 2009-08-10T15:21:46.863 に答える
1
$number = filter_var(str_replace(array("+","-"), '', $number), FILTER_SANITIZE_NUMBER_INT);

Filter_Varプラスとマイナス以外のすべてを削除し、str_replace はそれらを削除します。

または preg_replace を使用できます

$number = preg_replace('/[^0-9]/', '', $number);
于 2009-08-10T15:22:19.763 に答える
0

あなたはそれを2つの方法で行うことができます。文字列内の各インデックスを繰り返し処理し、それに対して is_numeric() を実行するか、文字列に対して正規表現を使用できます。

于 2009-08-10T15:23:01.243 に答える
0

クライアント側では、フォームを作成するときに設計したフォーマットを使用することをお勧めします。これは、zip または電話フィールドに適しています。この jqueryプラグインを参照してください。後でサーバー側で簡単になります。

于 2009-08-10T15:42:00.550 に答える