0

私のアプリケーション コードで正常に動作する次の正規表現があり、他のコード エディターはそれに関する問題を報告していません。パスワードの検証に使用されます。

/^(?=.*[A-Za-z])+(?=.*[\d])+(?=.*[^A-Za-z\d\s])+.*$/

言い換えれば:

文字が 1 つ必要 数字が 1 つ必要 文字以外、数字以外が 1 つ必要

現在、netbeans にはかなりまともな正規表現パーサーがあるようで、これは誤ったステートメントであると報告されています。しかし、私は正規表現が初めてなので、エラーを見つけることができません。?=最後に1つ以上の肯定的な先読みを使用しているため+ですか?

エラーを+取り除くと消えますが、アプリケーションで正規表現の実行が停止します。

誰かが私の表現のどこが悪いのか教えてくれれば、それは素晴らしいことです.

このステートメントは、私が使用している jQuery 検証プラグインで使用されています。また、プラグインを使用しているため、これをいくつかの小さな (明らかに単純でクリーンな) 式に分割することは避けたいと思います。それには大変な労力が必要になります。

4

1 に答える 1

1

先読みなどのゼロ幅アサーションに量指定子を適用しても意味がありません。このようなアサーションの要点は、テキストを消費することなく、つまり、現在の一致位置を進めることなく、何らかの条件が真であることをアサートできることです。一部の正規表現フレーバーはそれを構文エラーとして扱いますが、他のものは量指定子を事実上無視します。これらのプラス記号を取り除くと、正規表現が正しくなります。

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*$/

期待どおりに動作しない場合は、悪名高い IE 先読みバグが発生している可能性があります。通常の回避策は、次のように、最初の先読みが最後に固定されるように順序を変更することです。

/^(?=.{8,15}$)(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*/

これ(?=.{8,15}$)は単なる例です。あなたの本当の要件が何であるかはわかりません。最小長と最大長の制限を課したい場合、これは理想的な場所です。

于 2013-05-20T07:24:56.303 に答える