如何在此正则表达式中包含负十进制数?

时间:2013-04-04 14:49:32

标签: regex numbers

如何通过此正则表达式匹配负数?这个正则表达式可以正数值正常工作,但我希望它也允许负值,例如-10,-125.5等。

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

由于

14 个答案:

答案 0 :(得分:131)

您应该在开头添加-?添加可选连字符(?quantifier,意思是一次或零次出现):

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

我在Rubular中用以下值验证了它:

10.00
-10.00

并且两者都符合预期。

答案 1 :(得分:103)

一些正则表达式示例:

正整数

^\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}$

答案 2 :(得分:10)

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

尝试:

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

<强>更新

如果您想确定某个地方有数字,请使用

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

答案 3 :(得分:1)

只有在后跟数字时才会允许-+字符:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

答案 4 :(得分:1)

更新(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

答案 5 :(得分:1)

这将允许正整数和负整数

  

ValidationExpression =&#34; ^ - [0-9] \ d *(\ d +)$&#34;?

答案 6 :(得分:1)

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

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

让我们关注这个(\-\d+|\d+)部分并忽略其他部分,这个分号|在正则表达式中表示 OR ,然后负值将与此\-\d+匹配部分,以及此\d+

的正值

答案 7 :(得分:0)

只需添加0或1令牌:

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

答案 8 :(得分:0)

仅限负数,这是完美的。

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

答案 9 :(得分:0)

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

$ ./bin/acctbal
request> 0
John            : $123.05
request> 0 -1.85
John            : $121.20
request> 1
Paul            : $3885.41
request> 1 .59
Paul            : $3886.00
request> 5
error: invalid account.
request>
request> q

适用于负整数,十进制,带小数的负数

答案 10 :(得分:0)

这对我有用,allowing both negative and positive numbers

 \-*\d+

如果使用C#:

Regex.Match(someString, @"\-*\d+").Value;

答案 11 :(得分:0)

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

允许:

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:-1)

^[+-]?\d{1,18}(\.\d{1,2})?$

接受正十进制值或负十进制值。