web-dev-qa-db-ja.com

正規表現による数値範囲の確認

正規表現を使用して、文字列の特定の形式を検証しています。この文字列がゲームのルールになります。

例:ルールに従って「DX 3」はOKですが、「DX 14」もOKである可能性があります...文字列を見て、1つ以上の「数値」を見つける方法を知っているので、問題は正規表現が34にも一致し、この数はルールの「範囲」外です...

これを行うための正規表現について何か不足していますか?それともこれはまったく不可能ですか?

18
mrs1986

残念ながら、正規表現で範囲を定義する簡単な方法はありません。 1から23の範囲を使用する場合は、次のような正規表現になります。

([1-9]|1[0-9]|2[0-3])

説明:

  1. 値は1〜9です。
  2. または、値は1で始まり、その後に0-9が続きます
  3. または、値は2で始まり、その後に0-3が続きます
38
Marcus

それはそれほど短くなく、柔軟性もありません。

たとえば、1〜19を検索すると、「DX 1?[0-9]」を検索できますが、数値の境界で終わっていない場合は、すぐに醜くなり、ルールを変更することはできませんフレキシブル。

文字列を空白で分割し、x> 0およびx <24を使用することは、理解しやすく、より柔軟です。

3
user unknown

問題を解決する正規表現を記述するために、次の形式を使用できます。範囲が0〜15であるとします。

"^DX [0-9]|1[0-5]$" 

文字列を追加することで、範囲に応じて動的にすることもできます。

1
Puneet