110

我如何通过这个正则表达式匹配负数?此正则表达式适用于正值,但我希望它也允许负值,例如 -10、-125.5 等。

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

谢谢

4

15 回答 15

209

您应该在开头添加一个可选的连字符-??是一个量词,表示出现一次或零次):

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

我用这些值在 Rubular 中验证了它:

10.00
-10.00

并且都按预期匹配。

let r = new RegExp(/^-?[0-9]\d*(\.\d+)?$/);

//true
console.log(r.test('10'));
console.log(r.test('10.0'));
console.log(r.test('-10'));
console.log(r.test('-10.0'));
//false
console.log(r.test('--10'));
console.log(r.test('10-'));
console.log(r.test('1-0'));
console.log(r.test('10.-'));
console.log(r.test('10..0'));
console.log(r.test('10.0.1'));

于 2013-04-04T14:52:14.177 回答
150

一些正则表达式示例:

正整数

^\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}$
于 2013-04-04T14:53:00.310 回答
12

我不知道你为什么首先需要它[0-9]

尝试:

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

更新

如果您想确保在这些地方有一个数字,请使用

^-?\d+(\.\d+)?$
于 2013-04-04T14:53:22.780 回答
3

更新(13/08/2014):这是正数和负数的最佳代码 =)

(^-?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
于 2014-08-13T05:07:06.283 回答
2

这将只允许一个-or+字符后跟一个数字:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
于 2013-09-15T21:08:33.240 回答
2

我在 django url 中有一些关于正则表达式的实验,需要从负数到正数

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

让我们专注于这(\-\d+|\d+)部分而忽略其他部分,这个分号|表示正则表达式中的OR,那么负值将与这\-\d+部分匹配,正值将与此部分匹配\d+

于 2015-03-31T04:14:29.560 回答
1

这将允许正整数和负整数

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

于 2014-12-08T12:34:39.303 回答
1
^[+-]?\d{1,18}(\.\d{1,2})?$

接受正或负十进制值。

于 2017-12-23T10:30:08.730 回答
1

这对我有用,允许负数和正数

 \-*\d+

如果使用 C#:

Regex.Match(someString, @"\-*\d+").Value;
于 2018-03-12T20:37:29.260 回答
1

如果你有这个val="-12XXX.0abc23"并且你只想提取十进制数,在这种情况下,这个正则表达式 ( ^-?[0-9]\d*(\.\d+)?$) 不会帮助你实现它。
这是具有正确检测正则表达式的正确代码:

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

于 2019-12-30T06:48:39.320 回答
1

添加"-" minus后跟? quantifier在前面[0-9] expression应该可以完成工作。

-?[0-9]

以供参考

  • ^b-^ quantifier匹配任何以“b”开头的字符串
  • c?-? quantifier匹配 0 或 1 次出现的“c”
  • [0-9]- 找到之间的任何字符[] brackets
  • \d- 从中找到一个数字0-9
  • d*-* quantifier匹配零次或多次出现的“d”
  • \.- 匹配一个"." character
  • z+-+ quantifier匹配一次或多次出现的“z”
  • e$-$ quantifier匹配任何以“e”结尾的字符串

希望,这将有助于理解问题中发布的正则表达式

于 2021-09-06T12:12:44.167 回答
0

只需添加一个 0 或 1 标记:

^-?[0-9]\d*(.\d+)?$
于 2013-04-04T14:54:33.877 回答
0

仅对于负数,这是完美的。

^-\d*\.?\d+$
于 2017-08-23T17:24:20.437 回答
0

数字的正则表达式,可选小数点,可选负数:

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

适用于负整数、小数、带小数的负数

于 2018-02-09T06:29:49.553 回答
0
^(-?\d+\.)?-?\d+$

允许:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
于 2019-01-26T10:09:20.967 回答