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


89

如何通过此正则表达式匹配负数?这个正则表达式可以很好地使用正值,但是我希望它也允许负值,例如-10,-125.5等。

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

谢谢


1
@DanPuzey您没有看到他发布的Regex吗?
Nolonar 2013年


我尝试在开始时添加[-],但这没有用。我还尝试了一些小的更改的组合
2013年

试试这个^-?\ d +(\。\ d +)?$
Civa 2013年

@DanPuzey您的话语无助于讨论,对您
不屑一顾

Answers:


173

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

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

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

10.00
-10.00

两者均符合预期。


2
您应该逃脱这个点,即^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
如果有可能需要捕获明确的正数(+10.00,在某些应用中使用),则可以使用^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

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

日期年月日,年/月/日等):

^([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+)?$

更新资料

如果您想确定自己的位置上有数字,请使用

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

1
如果可能的话,可能只是为了保证一个数字,^-?\d+(\.\d+)?$应该工作
Cemafor 2013年

最合适的答案。我认为接受的答案中没有显示[0-9]是必需的。
UzumakiL

3

UPDATED(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

更改-*为,-?因为它匹配-------------
Toto

我进行了一些其他更改,现在工作正常。请检查=)
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+)?$

安德烈(Andre)击败了我,他也是对的,不需要[0-9]令牌。
BanksySan



0

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

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

适用于负整数,十进制,负和十进制


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"并且只想提取十进制数字,则在这种情况下,此regex(^-?[0-9]\d*(\.\d+)?$)不会帮助您实现它。
这是带有正确检测正则表达式的正确代码:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.