精度が2の10進数の単純な正規表現


回答:


397

有効な正規表現トークンは実装によって異なります。一般的な形式は次のとおりです。

[0-9]+(\.[0-9][0-9]?)?

よりコンパクト:

\d+(\.\d{1,2})?

どちらも、両方とも小数点の前に少なくとも1桁、小数点以下に1桁あると想定しています。

文字列全体がこの形式の数であることを要求するには、式を(Perlの形式で)次のように開始タグと終了タグで囲みます。

^\d+(\.\d{1,2})?$

10進数の前に先行数字がない数字(.12)と、末尾にピリオドがある整数()を照合し12.、単一のピリオド(.)の入力を除外するには、次のようにします。

^(\d+(\.\d{0,2})?|\.?\d{1,2})$

追加されました

小数部分をラップし()?てオプションにしました。これは、「12. 含む」のようなフォームを除外することに注意してください^\d+\\.?\d{0,2}$

追加されました

^\d{1,6}(\.\d{1,2})?$繰り返しを停止し、10進数値の全体に制限を与えるために使用します。


4
数学的には、精度が2の数値は、最後がゼロであっても常に小数点以下2桁である必要があると思います。これは重要な数値での私の経験に基づいているため、間違っている可能性がありますが、1.7が1.70であるか、1.70から1.74までの数値であるかは、実際にはわかりません。
paxdiablo 2008年

ありがとう!まさに私が必要としていたものでした:) +1
アレックス

6
これは0001.00に一致します:/
redben '21

2
「-?」を追加 この^ \ d +(\。\ d {1,2})?$ ===> ^-?\ d +(\。\ d {1,2})?$は、-veをサポートするために
Murali Murugesan

1
@BimalDasは、あなたが式を付けることによってネガをサポートすることができます-?のように、-?\d+(\.\d{1,2})?。それらはOPの質問には含まれていなかったため、負の値や小数点で始まる数値は含めませんでしたが、より一般的な数値形式では確かに有効です。ここのコメントスレッドは、「。21」を処理するいくつかの方法を提供します。
DocMax 2017

276
^[0-9]+(\.[0-9]{1,2})?$

そして、正規表現は読むのがひどいので、あまり理解されていないので、同等の冗長表現を次に示します。

^                         # Start of string
 [0-9]+                   # Require one or more numbers
       (                  # Begin optional group
        \.                # Point must be escaped or it is treated as "any character"
          [0-9]{1,2}      # One or two numbers
                    )?    # End group--signify that it's optional with "?"
                      $   # End of string

ほとんどの正規表現の実装(最も一般的なPCREを含む)では[0-9]と置き換えることができます。読みやすくするために残しました。\d[0-9]

また、これは私がそれをチェックするために使用した簡単なPythonスクリプトです:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

10進数の前に最大3桁が必要ですが、このようにして運が
よかった

3
@Raghurocks +最初の閉じ括弧を削除します^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

Javaユーザーの場合:小数点はエスケープしないでください。

3
@Gracchusよろしいですか?動作するように見えるので、おそらく\\.代わりにすべき\.です.が、(小数点以下の桁数だけでなく)任意の文字に一致します。たとえば、両方とも1z231.23エスケープしない場合は有効と見なされます
dbr

@dbrたぶんそれはそれであるはずです。Javaは不適切なエスケープについて不満を述べました。その「修正済み」を削除する(黙って)笑。まだ十分にテストする機会がありませんでした。


13

3桁ごとの区切り記号がない数値の場合、私はこのシンプルでコンパクトな正規表現が好きです。

\d+(\.\d{2})?|\.\d{2}

または、2の精度に限定されません。

\d+(\.\d*)?|\.\d+

後者のマッチ
1
100
100
100.74
100.7
0.7
0.7
0.72

そして、それは空の文字列とは一致しません(\ d *。?\ d *のように)


7

私は2つの小数点以下の桁数までは、このいずれかを使用します
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) 渡し:
0.25
0.25
10.25
0.25は

渡しません。
-.25
01.25
1
1.256


これも空白値を渡します。
BengalTigger 2015

7
^[0-9]+(\.([0-9]{1,2})?)?$

のようなものが12.受け入れられます。これは一般的に受け入れられていることではありませんが、「柔軟」である必要がある場合は、それが1つの方法です。もちろん、[0-9]に置き換えることもできますが\d、この方法の方が読みやすいと思います。



3

それはVALIDSので、メインの答えが間違っています5.か、5,入力である

このコードはそれを処理します(ただし、私の例では負の数は禁止されています)。

/^[0-9]+([.,][0-9]{1,2})?$/;

結果は次のとおりです。

true => "0" / true => "0.00" / true => "0.0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true =>「100.01」/ true =>「100.2」/ true =>「00」/ false =>「5」/ false => "6、" / true => "82" / true => "81,3" / true => "



2

一般的に、小数点以下の桁数は無制限です。

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$



1

私の答えも付け加えると、誰かがそれを役に立つと思うかもしれませんし、私のものも正しいかもしれません。

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));


1

私のプロジェクトで試してみました。これにより、符号付きの数値+ | -も使用できます。

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/

0

Chrome 56は、タイプ番号でこの種のパターン(Chrome 56は11.11。を追加しています。)を受け入れません。進行状況として、テキストとしてタイプを使用してください。


0

これにより、指数と最大2桁の10進数が許可されます。

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

デモ


それは整数とも一致しません1.2e-10
Toto

うん、訂正してくれてありがとう 私はそれを10進数でのみ考えた
Nambi_0915

([0-9]+)?よく書かれてい\d*ます。今では一致しません10e3。そして、OPは2桁までを照合したいと考えています。
トト

-1
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

関数は、任意の10進数の天気番号に小数位があるかどうかを検証します。それ以外の場合は、「正しい数字」と表示されます。「金額テキストボックスには数字のみを入力してください。」警告メッセージが表示されます。

ありがとう... :)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.