0

私は人々がそこにジョークを書くウェブサイトを持っています。ユーザーは、好きなジョークを SMS として自分 (または友人) の電話に送信できます。ジョークの送信者 (ジョークをサイトに追加した人) はその下に表示されます:

ジョーク #12234

これは
ジョークの

送信者の本文です: ジョン


時々、人々は電話番号を送信者名として使用しますが、これは許可されていません。公衆。検閲できるように、送信者名に電話番号が含まれているかどうかを判断したいと考えています。電話番号は6桁以上の数字を想定しています。しかし問題は、ユーザーが次のように数字を区切る可能性があることです:

1234567890 は 1234XXX7890 になります
123 456 7890 は 123 XXX 7890
123-456-7890 123456-7890に
なります


等々。上記の形式と同様の形式はすべて検閲する必要があります。数字以外の文字を削除してから正規表現を使用しようとしましたが、問題はそれも取得することです:

john23 peterson12345

誰かがより良い方法を提供できますか?

4

2 に答える 2

0

すべてのフォーマットを保持するには、次を置き換えます

(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})

$1XXX$2

10 桁の数字をさらに制限するには (つまり、直前と直後に追加の数字を許可しない)、負のルックアラウンド アサーションを使用します。

(?<!\d)(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})(?!\d)
^^^^^^^                                   ^^^^^^

最後に、入力ミスにより、ユーザーがグループ間にスペースや記号を挿入するようになった場合はどうすればよい(123)45 6-7890でしょうか? これらもキャッチするには、次のようにします。

(?<!\d)((?:\d[-\s()]*){3})(?:\d[-\s()]*){3}((?:\d[-\s()]*){4})(?!\d)

ただし、これは「多すぎる」ことをキャッチする場合があり1-2-3-4-5-6-7-8-9-0ます。打ちたいバランスを決める必要があります。

于 2012-11-01T23:29:42.643 に答える