0

ID のコンマ区切りリストまたは ID の範囲を入力できるフィールドを持つフィルターがあります。たとえば、「1,2,3」と「4-9」は有効な ID です。私はこれのために次の正規表現を書きました:

/(^\d+(?:[,]\d+)*$)|(^\d+-\d+$)/.test(str)

ここで、str は評価中の文字列です。これは正常に機能し、範囲内で最初の ID が 2 番目の ID より大きい場合を除き、すべてのシナリオで正しいブール値を返します。たとえば、12 ~ 10 は無効な範囲ですが、上記の正規表現は false を返しません。

正規表現を使用してそれを検証する方法はありますか? 文字列を '-' で分割して 2 つの部分を比較することはできますが、正規表現が提供する簡潔さは失われます。

4

2 に答える 2

3

「正規表現が提供する簡潔さ」は、おそらくそれがもたらす複雑さに値するものではありません。これはかなり明確に定義された問題のようであり、最初に要素ごとに分割し,、次に分割することは、非常に簡単で効果的なアプローチのようです。-

于 2012-08-17T14:59:33.880 に答える
2

その問題を解決することは、正規表現の仕事ではありません。

正規表現を使用して範囲を抽出し、後で検証します。

于 2012-08-17T14:58:54.317 に答える