3

正規表現を書いたときにのみ発生すると思います。私は一連のページネーション番号を検証するための単純な正規表現を持っています。これは後でデータベースに送信51025ます。50例:100250

/all|5|10|25|50|100|250/

テストを実行すると、上記の正規表現は 50、100 および2500からのみカットし、 !!?からはカットしません。10

オンラインの例:
http://viper-7.com/IbKFKw

ここで何が間違っていますか?今回は本当に何が欠けているのですか?

4

2 に答える 2

10

これは、文字列50で正規表現が最初に一致するため5です。これは有効です。文字列250では、正規表現は最初に に一致25します。これは有効であり、ここで終了します。

アンカーを追加してみてください:

/^(?:all|5|10|25|50|100|250)$/

これにより、正規表現が文字列全体と一致するようになるため、探している正しい一致が返されます。

于 2013-08-28T19:56:33.570 に答える
7

選択肢は左から右に試されるため、一致5は よりも優先され50ます。しかし、 from1を切り捨てることはありません。簡単に並べ替えることができます:010

/all|250|100|50|25|10|5/

0または、関連する選択肢にオプションで を追加します (?は貪欲であるため、0が存在する場合は一致します)。

/all|50?|100?|250?/

また

/all|(?:5|10|25)0?/

これがマッチングではなく検証 (つまり、文字列全体に対するチェック) である場合は、Jerry の提案に従い、アンカーを使用して、番号の周りに望ましくない文字がないことを確認します。

/^(?:all|5|10|25|50|100|250)$/

(もちろん(?:...)、上記のパターンのいずれかを内部で使用することもできますが、不完全な一致は許可されないため、優先順位は関係ありません。)

于 2013-08-28T19:56:25.117 に答える