0

次の正規表現は、テキスト ボックスに入力された私書箱の検証を行います。

\b[P|p](OST|ost)?[.\s-]+[O|o](FFICE|ffice)?[.\s-]+[B|b](OX|ox)\b

ユーザーがテキストボックスに私書箱を入力していないかどうかを検出するためにこれを否定したいのですが、JavaScriptを使用してそれを行うことができることはわかっていますが、私のプラットフォームには異なるフォーム構造、そのデマンドウェアフォームがあり、正規表現がありますフィールド属性として。このフィールドに正規表現を送信すると、自動的に検証されます。

4

4 に答える 4

3

これを正規表現でやろうとしないことをお勧めします。1を倒すのは簡単すぎる。代わりに、自分が何をしているかを知っている人に問題を外注する必要があります。この場合、米国の住所のみを扱っているためUSPS .

そのため、 USPS 住所標準化/検証 APIを使用する必要があります。アドレスを送信すると、そのアドレスの「クリーンな」バージョンが返されます。アドレスが有効かどうかが表示されます。また、それが私書箱の場合は、標準化された形式で返されます。今では、無効にできる正規表現は必要ありません。必要なのは、単純な文字列の一致だけです。さらに、おまけとして、配送先住所の標準化および検証済みの表現が得られるため、エラーの可能性が2減少します。

私はあなたの実際の技術的な質問を回避していることを認識しています. しかし、エンジニアリングの一部は、間違った道であるソリューションを放棄しています。アドレスを検証する必要があります。したがって、私書箱を表す一部の入力を検出できるが、他の入力では失敗するステート マシンを構築しようとするのではなく、住所を検証します。また、USPS は検証サービスを提供しており、彼らここで信頼できる専門家です。

1 : 敵対者に直面すると言っているのではありません。ただ、人々がアドレスを入力するために持っている創造的でずさんで怠惰な方法に直面することになるだけです。

2 : ただし、排除しない。

于 2013-08-07T13:21:50.647 に答える
0

否定的なルックアラウンドを使用する必要があります: (?!pattern).

この場合

 (?! \b[P|p](OST|ost)?[.\s-]+[O|o](FFICE|ffice)?[.\s-]+[B|b](OX|ox)\b )

参考のため:

正規表現のルックアラウンド

于 2013-08-07T13:03:08.073 に答える
0

正規表現が JavaScript のものである場合は、否定先読みを使用できます。

^(?!.*?\b[Pp](OST|ost)?[.\s-]+[Oo](FFICE|ffice)?[.\s-]+[Bb](OX|ox)\b)
于 2013-08-07T13:03:41.967 に答える
0

次のパターンを使用できます。

^(?:[^p]+|\Bp+|p(?!(?:ost)?[.\s-]+o(?:ffice)?[.\s-]+box\b))+$

アイデアは、「p」で始まる部分文字列のみをテストすることです (より多くのパフォーマンスを得るために)。このチェックで大文字と小文字を区別しないようにする(?i)には、パターンの先頭に次を追加します。

^(?i)(?:[^p]+|\Bp+|p(?!(?:ost)?[.\s-]+o(?:ffice)?[.\s-]+box\b))+$
于 2013-08-07T13:49:28.847 に答える