文字列に SSN や電話番号を含めないでください。以下の正規表現は機能しません。xxxxxxxxx 形式のみを受け入れます。
xxx-xx-xxxx
またはxxx-xxx-xxx
またはを含めないでxxxxxxxxx
ください。
regex = "^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$";
文字列に SSN や電話番号を含めないでください。以下の正規表現は機能しません。xxxxxxxxx 形式のみを受け入れます。
xxx-xx-xxxx
またはxxx-xxx-xxx
またはを含めないでxxxxxxxxx
ください。
regex = "^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$";
あなたは試すことができます:
^(?!((\\d{9})|(\\d{3}-\\d{2}-\\d{4})|(\\d{3}-\\d{3}-\\d{3}))$).*
説明するために、あなたが提供したクエリを読んだ場合:
^((?!\\d[9]$)|(?!(\\d{3}-?\\d{2}-?\\d{4}$)|(?!(\\d{3}-?\\d{3}-?\\d{3})$)$
私たちはそれを読むことができました: is not followed by xxxxxxxxx OR is not followed by xxx-xx-xxxx OR is not followed by xxx-xxx-xxx
(上の私のバージョンでは、これを次のように言い換えました: is not (xxxxxxxxx OR xxx-xx-xxxx OR xxx-xxx-xxx)
.)。
世界中のどの文字列も、そのうちの少なくとも 2 つには一致しないことが保証されているため、それらの組み合わせは常に真であり、はるかに単純で効果的な正規表現が得られます。
^$
?!
ゼロ幅のアサーションであるため、何も消費しません。先読みによってチェックされたものと一致する場合でも、入力を消費していないため、先読みの外で必要な $ に到達することはありません。.*
最終的な$
修正の前にa を追加するだけです。
ハイフンの後に ? を付けるべきではないと思います。それらをオプションにすることは、 と も一致させることを意味しxxx-xxxxxx
ますxxx-xx-x-xxx
。それが意図されている場合は、それらを元に戻すか、正規表現を大幅に簡素化して、次のようにすることができます。
^(?!\\d{3}-?\\d{2}-?\\d-?\\d{3}$).*
他の問題\\d[9]$
は\\d{9}$