2011-01-10 12 views
-1

0から99.999までの数字にマッチする正規表現が必要です(99,999も有効です)。数字と一致する正規表現0-99.999

有効な例:

1,1 
99.9 
12.876 
1,777 

無効例:

9837,83 
-12,24 
11.1112 
+4

私はあなたの条件を理解していません。 0から始まり、99.999または99,999で終了する必要がありますか?しかし、あなたの例はこれを示していません。別々の行に置いて、あなたの例をより明確にすることができますか? –

+0

また、どの開発環境で作業していますか? –

+0

@ElRonnoco:「0-99.999の数字」(そして「10進カンマ」(http://en.wikipedia.org/wiki/Decimal_mark#Countries_using_Arabic_numerals_with_decimal_comma)を使用)をほとんど見ることができます。 –

答えて

1

ウィルこの作品?

[0-9]{1,2}[.,][0-9]{1,3} 

これは、これと同様のものと一致した:

  • 0.0/01,1
  • 99,999/09.009

ではなく、このようなもの:

  • .0/,1/1/01
  • 099,999/09.0090

ことができます願っています。

+0

あなたが10または25のものを意味するならば、それは設計によるものです。私はリクエスタがそれにマッチしたいと思ったことはありませんでした。私はポストでそれを言う: –

2
^\d{1,2}(?:[.,]\d{1,3})?$ 

とする必要があります。

説明:

^   # anchor the match at the start of the string 
\d{1,2} # match one or two digits 
(?:  # optionally match the following group: 
[.,]  # a . or , 
\d{1,3} # 1-3 digits 
)?  # end of optional group 
$   # anchor the match the end of the string 
2

あなたは数があなたが正規表現を使用してはならない一定の範囲内にあるチェックするために欠けている場合、それはあまりにも遠く、あなたが何をしているかのロジックとハードから削除されますデバッグ。私はまずカンマを小数点に置き換えます。その後、範囲を確認します。

例えば(Javascriptの)

function isValid(inputString) 
{ 
    var number=parseFloat(inputString.replace(',','.')); 
    return (number>=0 && number <=99.999); 
} 

更新回答

上記溶液は、精度の3つ以下小数点以下の桁数を持つようにOPの要件を考慮していません。

function isValid(inputString){ 
    var number=parseFloat(inputString.replace(',','.')); 
    validPrecision = true; 
    if (inputString.split('.')[1]) { 
     validPrecision=inputString.split('.')[1].length<=3;} 
    return (number>=0 && number <=99.999 && validPrecision); 
}; 
+0

+1 Regexは過剰です – marcog

+0

プラスとして、それは小数点と桁区切りのためのロケールを考慮に入れます –

+0

downvoting時にコメントを残してください! :)ありがとう –

1

次のように動作します:

^\d{1,2}((,|.)\d{1,3})?$ 
関連する問題