回答:
以下を使用します。
/^\d*\.?\d*$/
^
-ラインの始まり。\d*
-0桁以上\.?
-オプションのドット(正規表現で.
は特殊文字であるためエスケープされます)。\d*
-0桁以上(小数部);$
-行の終わり。これにより、0.5のように先行ゼロを要求するのではなく、0.5の小数が可能になります。
/^\d*\.?\d+$/
、小数点の後に数字を強制するでしょう。
/\d+\.?\d*/
1桁以上の数字(\d+
)、オプションのピリオド(\.?
)、0桁以上の数字(\d*
)。
使用法または正規表現エンジンによっては、開始/終了行アンカーを追加する必要がある場合があります。
/^\d+\.?\d*$/
.
と空の文字列に一致します。
-
、まったく含まれていません。
適切に行うには、次のような正規表現が必要です。
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
(Perlでサポートされている)拡張修飾子を使用した、空白を含む同じ式:
/^ [+-]? ( (\d+ (\.\d*)?) | (\.\d+) ) $/x
またはコメント付き:
/^ # Beginning of string
[+-]? # Optional plus or minus character
( # Followed by either:
( # Start of first option
\d+ # One or more digits
(\.\d*)? # Optionally followed by: one decimal point and zero or more digits
) # End of first option
| # or
(\.\d+) # One decimal point followed by one or more digits
) # End of grouping of the OR options
$ # End of string (i.e. no extra characters remaining)
/x # Extended modifier (allows whitespace & comments in regular expression)
たとえば、次のように一致します。
そして、これらの非数値を拒否します:
より単純なソリューションでは、有効な数値を誤って拒否したり、これらの非数値と一致したりする可能性があります。
^A?(B|C)$
ます。以前は、どちらが正しくなかったか^A?B|C$
を実際に意味するように書かれ(^A?B)|(C$)
ていました。注:^(A?B|C)$
実際には^((A?B)|(C))$
「+.5」と一致しないありません。
この正規表現を試してください:
\d+\.?\d*
オプションの10進数の前の\ d +桁
。?オプションの10進数(?数量詞によるオプション)
\ d * 10進数の後のオプションの数字
123.
私は以下を使用してしまいました:
^\d*\.?\d+$
これにより、以下が無効になります。
.
3.
.3
あなたはこれを使うことができます:
^\d+(\.\d)?\d*$
一致:
11
11.1
0.2
一致しません:
.2
2.
2.6.9
これは私がやったことです。上記のどれよりも厳格です(一部よりも正確です)。
^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$
渡される文字列:
0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34
失敗する文字列:
.
00000
01
.0.
..
00.123
02.134
^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$
人々が通常正しい形式の10進数と考えるものを反映する必要があります。
小数点の前の数字は、1桁の場合(0から9の場合もある)、または1桁以上の場合(0から始めることはできません)のいずれかです。
小数点記号の前に数字がある場合、小数とそれに続く数字はオプションです。それ以外の場合は、10進数の後に少なくとも1桁の数字が必要です。小数点の後に複数の末尾の0が許可されることに注意してください。
grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'
次と正しく一致します。
9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001
署名された同等のものと同様に、次を拒否します。
.
00
01
00.0
01.3
署名された同等物、および空の文字列。
(?<![^d])\d+(?:\.\d+)?(?![^d])
清潔でシンプル。
これは、サフィックスとプレフィックス、RegEx機能を使用します。
直接trueを返します-IsMatch条件の場合はfalse
^\d+(()|(\.\d+)?)$
これを思いついた。整数と10進数の両方を使用できますが、10進数を入力する場合は、完全な10進数(先頭と末尾の数字)を強制します。
あなたが尋ねたものはすでに答えられているので、これは、オプションの小数点が入力された場合に2桁の10進数のみが必要な人のための追加情報です。
^\d+(\.\d{2})?$
^:文字列の先頭
\ d:数字([0-9]と等しい)
+:1回、無制限
キャプチャグループ(。\ d {2})?
?:0回と1回。: キャラクター 。
\ d:数字([0-9]と等しい)
{2}:正確に2倍
$:文字列の終わり
1:一致する
123:一致する
123.00:一致する
123 .:一致しない
123 ..:一致しない
123.0:一致しない
123.000:一致しない
123.00.00:一致しない
Perlでは、Regexp :: Commonを使用します。これにより、特定の数値形式の微調整された正規表現を組み立てることができます。Perlを使用していない場合でも、生成された正規表現は通常、他の言語で引き続き使用できます。
Regexp :: Common :: Numberに正規表現の例を生成した結果を出力します。
$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))
これを試して。^[0-9]\d{0,9}(\.\d{1,3})?%?$
それはテストされ、私のために働いた。