2009-08-31 17 views
5

ユーザー入力を検証しようとしていますが、これはカンマ区切りの数字です。私はRegExでこれをやりたいのですが、適切な表現を思いつくことはできません。カンマで区切られた正規表現用の正規表現

それは以下の文字列(およびより大きな)を検証する必要があります:

1 
12 
123 
1,234 
12,345 
123,456 

と、以下の文字列(およびスゴ)を無効:

1,1 
1,12 
12,1 
12,12 
123,1 
123,1 

任意の助けいただければ幸いです。

^\d{1,3}([,]\d{3})*$ 

基本的にあなたが持つことができます:>

^(((\d{1,3},)*\d{3})|(\d{1,3}))$ 
^(\d{1,3}[,])*\d{3}|\d{1,3}$ 

答えて

14

どのようにこの程度を - いくつかのバリエーションと一緒に、:ここで

は、私がこれまで(動作しないEDIT)を試みたものです1〜3桁のカンマは使用できません。その後、カンマが必要です。コンマがある場合は、の後に3桁を続けなければなりません。そのコンマ3桁のシーケンスは任意の回数表示できます。

EDIT:アンドリューウサギが観察されたように、あなたが開始括弧の後?:を配置することによって、代わりに非キャプチャグループを使用することができますので、あなたは、それが一致したという事実を超えて括弧の中に発見されたものを気にしないでください。

^\d{1,3}(?:[,]\d{3})*$ 
+3

+1いいです。私の唯一の批判:この正規表現は検証用であるため、キャプチャグループを非キャプチャグループに変更する必要があります。 –

+2

良い点ですが、グループを非キャプチャにすると正規表現がより醜いものになるということは、私には常に悩まされています。 –

+0

元の正規表現を見ると、12,1,123のような文字列が有効です(\ d {1,3}、)* \ d {3})は上記の値を満たしていません –

関連する問題