この正規表現に負の10進数を含めるにはどうすればよいですか?


89

この正規表現で負の数も一致させるにはどうすればよいですか?この正規表現は正の値で正常に機能しますが、-10、-125.5などの負の値も許可する必要があります。

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

ありがとう


1
@DanPuzey彼が投稿した正規表現を見ませんでしたか?
Nolonar 2013


最初に[-]を追加しようとしましたが、うまくいきませんでした。小さな変更の組み合わせも試しました
user1786107 2013

??\ D +(。\ \ D +)$ -この^試す
CIVA

@DanPuzeyあなたの言葉は議論に何も追加せず、不親切です
Wassadamo

回答:


173

最初にオプションのハイフンを追加する必要があります-?(これ?は、1回または0回の出現を意味する数量詞です)。

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

Rubularで次の値を使用して検証しました。

10.00
-10.00

両方とも期待どおりに一致しました。


2
ドットをエスケープする必要があります。つまり、^-?[0-9]\d*(\.\d+)?$
Alex Shesterov 2013

14
明示的に正の数(+10.00、一部のアプリケーションで使用)をキャプチャする必要がある可能性がある場合は、使用できます^[-+]?[0-9]\d*(\.\d+)?$
Cemafor 2013

127

いくつかの正規表現の例:

正の整数

^\d+$

負の整数

^-\d+$

整数

^-?\d+$

正の数

^\d*\.?\d+$

負の数

^-\d*\.?\d+$

正の数または負の数

^-?\d*\.{0,1}\d+$

電話番号

^\+?[\d\s]{3,}$

コード付きの電話

^\+?[\d\s]+\(?[\d\s]{10,}$

1900- 2099年

^(19|20)[\d]{2,2}$

日付(dd mm yyyy、d / m / yyyyなど):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

11

なぜ最初にそれが必要なのかわかりません[0-9]

試してみてください:

^-?\d*(\.\d+)?$

更新

1の場所に数字があることを確認したい場合は、

^-?\d+(\.\d+)?$

1
おそらく、1桁を保証するためだけに^-?\d+(\.\d+)?$、その場合は機能するはずです
Cemafor 2013

最も適切な答え。受け入れられた答えに示されているように、[0-9]は必要ないと思います。
uzumakiL 2018

3

更新(2014年8月13日):これは正と負の数に最適なコードです=)

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

私はこの番号で試してみましたが、うまくいきました:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

に一致-*する-?ため、に変更し-------------ます。
トト

追加の変更をいくつか加えましたが、正常に動作するようになりました。それを確認してください=)
PachoZuñiga2014


1

これにより、正の整数と負の整数の両方が可能になります

ValidationExpression = "^-?[0-9] \ d *(\ d +)?$"


1

django urlの正規表現についていくつかの実験があります。これには、負の数から正の数までが必要です。

^(?P<pid>(\-\d+|\d+))$

この(\-\d+|\d+)部分に焦点を当て、他の部分を無視しましょう。このセミコロン|は正規表現のORを意味し、負の値はこの\-\d+部分と一致し、正の値はこれに一致します\d+



0

0または1のトークンを追加するだけです。

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

アンドレは私をそれに打ち負かしました、彼も正しいです、[0-9]トークンの必要はありません。
BanksySan 2013



0

数値の正規表現、オプションの小数点、オプションの負:

^-?(\d*\.)?\d+$;

負の整数、10進数、負の10進数で機能


0
^(-?\d+\.)?-?\d+$

許可:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234

0

これがありval="-12XXX.0abc23"、10進数のみを抽出したい場合、この場合、この正規表現(^-?[0-9]\d*(\.\d+)?$)はそれを達成するのに役立ちません。
これは、正しい検出正規表現を使用した適切なコードです。

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);

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