2012-04-26 3 views
8

A comprehensive regex for phone number validationには、受け入れられた回答にいくつかのコメントがあります。別のStackOverflowの感嘆符が電話番号REGEXを含む投稿を表示するのはなぜですか?

string.replace("[^\d+!x]", "") 

すぐにこれとコメントが正規表現を提案し、以下、他の質問者に尋ねる:コメントの一つは、@jcmcbethにより、利用者から提出された電話番号の桁数を取得するために使用するには、次の単純な正規表現を提案していますwhy the !x part?、これは次のコメントで回答されます:The !x is there to keep any "x" character from getting stripped

感嘆符!を除いて、これは私にとって意味があります。正規表現の文字クラスのドキュメントを見ると、感嘆符が特殊文字であるとは見当たりませんし、xにはその前に特殊文字が必要であるとは思われません。また、リンクされた質問の議論から、感嘆符が電話番号の一部であるかもしれないことを示すコメントは表示されません(否定された文字クラスへのその包含を説明する)。

感嘆符が存在する理由を誰かに説明してもらえますか?ありがとう。

+2

正規表現がエキサイティングなので、 – bta

答えて

7

あなたは絶対に正しく、xで十分です。 !は、文字クラス内または文字列内のリテラル!に一致します。特別な意味を持つ唯一の場所は、それが否定的な先読みまたは否定的な後ろ向きの一部であるときです。

-3

きっと[^\d+!x]は "NOT '\'、NOT 'd'、NOT '+'、NOT '!'およびNOT 'x'" を意味します。

[ ]は文字グループです。

[^ ]は、文字のリストを無効にします。

+2

'\ d'は数字の短縮形です。他の場所と同じように、文字クラスでも同じように動作します。あなたが実際にそれをバックスラッシュまたは 'd 'にマッチさせたいならば、バックスラッシュをエスケープする必要があります:' [^ \\ d +!x] '。しかし、それは著者が意図したものではありません。 –

+0

方言によって異なります。 Perlの前では、 '[^ \ d]'はバックスラッシュまたはd(または改行)を除くすべての文字を意味します。 – tripleee

関連する問題