2009-08-10 12 views
0

私は、電話番号を入力するはずのユーザーの入力があります。問題は、ハイフンやスペースで電話番号を書く人がいることです。私はそのようなものを削除し、私のデータベースに数字だけを格納するフィルタを入力トラフを入れたい。phlのホワイトリスト

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

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

:私は入力 "0333 452-123-4" は "03334521234"

感謝をもたらすことがしたいです!

答えて

4

多くの口語や地域差があるため、これは問題ではありません。 What is the best way for converting phone numbers into international format (E.164) using Java?を参照してください。Javaですが、同じ規則が適用されます。

もっと完全なものが必要な場合を除き、私はそれを簡単にしておきます。有効な正規表現のリストを作成し、一致するものが見つかるまでそれぞれの入力をチェックします。あなたはそれが本当にシンプル、単純に数字以外を削除したい場合は

:ただの数字を拾い出し、ところで

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

は、定義により、他のすべてを削除するのと同じことです。あなたが何か違う何かを意味するならば、それを言い換えることができます。

+0

よく説明されています。 +1 – Boldewyn

+0

あなたのサンプルコードはうまくいきましたが、それを理解しようとするのは本当に苦労しました。私は書きました: $ phone = preg_replace( '/ [^ \ d] /'、 ''、$ phone);代わりに これらの2つの違いはありますか?あなたが使っている感嘆符の詳細はどこで読むことができますか? –

+0

唯一の違いは、空の文字列を持つ1つの非数字ではなく、非数字のグループを空の文字列(したがって、1つ以上を示す+演算子)で置き換えることです。本当に小さな違い。 – cletus

1
$number = filter_var(str_replace(array("+","-"), '', $number), FILTER_SANITIZE_NUMBER_INT); 

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

か、あなたはそれを2つの方法で行うことができますにpreg_replace

$number = preg_replace('/[^0-9]/', '', $number); 
0

を使用することができます。文字列の各インデックスを繰り返し処理し、is_numeric()を実行するか、文字列に正規表現を使用できます。

0

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

関連する問題