0

アプリケーションでは、ユーザーが入力した文字列を検証する必要があります。

1 つの数値、または範囲 ('-' で区切られた 2 つの数値)、またはカンマ区切りの数値および/または範囲のリスト、および任意の数値は 1 から 999999 の間である必要があります。

カンマまたは「-」の前後にスペースを入れることができます。

次の正規表現がそれを行うと思いました。

(\d{1,6}\040?(,|-)?\040?){1,}

これは以下と一致します (これは優れています)。(\040正規表現の はスペースの文字です)。

  • 00001
  • 12
  • 20,21,22
  • 100-200
  • 1,2-9,11-12
  • 20、21、22
  • 100 - 200
  • 1、2 - 9、11 - 12

ただし、次のものでも一致します。

  • !!!12

ここで何が欠けていますか?

4

2 に答える 2

1

正規表現を固定する必要があります

^(\d{1,6}\040?(,|-)?\040?){1,}$

そうしないと、"!!!12" で部分一致が得られ、最後の桁のみが一致します。

ここでRegexrを参照してください

于 2013-01-29T13:50:30.790 に答える
0
/\d*[-]?\d*/

私はこれをperlでテストしました:

> cat temp
00001 
12 
20,21,22 
100-200 
1,2-9,11-12 
20, 21, 22 
100-200
1, 2-9, 11-12
> perl -lne 'push @a,/\d*[-]?\d*/g;END{print "@a"}' temp
00001   12   20  21  22   100-200   1  2-9  11-12   20   21   22   100-200  1   2-9   11-12 

上記の結果は、すべての正規表現の一致を配列に入れ、最後に配列要素を出力することを示しています。

于 2013-01-29T13:58:55.337 に答える