如何在这个正则表达式中匹配负数?这个正则表达式可以很好地匹配正数,但我希望它也可以匹配负数,例如-10,-125.5等。
^[0-9]\d*(\.\d+)?$
谢谢
-?
(?
是一个表示出现一次或零次的量词):^-?[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'));
^-?[0-9]\d*(\.\d+)?$
。 - Alex Shesterov\d+
替换[0-9]\d*
呢?这样就可以得到^[-+]?\d+(\.\d+)?$
。 - Amin_mmz^[-+]?\d*.?\d*$
可匹配 3
、3.
、0.3
和 .3
。根据应用程序,它可能更有用(例如输入验证)。 - nullromo一些正则表达式示例:
正整数:
^\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}$
^\d+$
包括零,但是0既不是正数也不是负数。对于正的非零整数,请尝试使用^[1-9]\d*$
。 - Joel我不知道为什么你需要那个数字的第一个[0-9]
。
尝试:
^-?\d*(\.\d+)?$
更新
如果您想确保十位数上有一个数字,请使用
^-?\d+(\.\d+)?$
^-?\d+(\.\d+)?$
应该可以胜任。 - Cemafor在[0-9]
表达式前添加"-"减号
,然后跟随? quantifier
应该可以解决问题。
-?[0-9]
参考资料
^b
- ^ quantifier
匹配以"b"开头的任何字符串c?
- ? quantifier
匹配0或1次出现的"c"[0-9]
- 查找[]括号
内的任何字符\d
- 查找0-9
中的数字d*
- * quantifier
匹配零个或多个"d"的出现\.
- 匹配一个"."字符
z+
- + quantifier
匹配一个或多个"z"的出现e$
- $ quantifier
匹配以"e"结尾的任何字符串希望这样能帮助理解问题中发布的正则表达式.
最近我遇到了一个案例,学生们只在数字响应字段中输入被接受的字符,但仍然设法破坏了一些东西。因此,我最终使用了以下万能表达式。
^[+-]?((\d*\.?\d+)|(\d+\.?\d*))$
这确保了所有应该工作的事情都会工作,包括:
0
.0
0.0
-.11
+.2
-0.2
+01.
-123.
+123.4567890
-012.0
+1
-1.
+.
-
.
(nul or newline)
\d+$
结尾)将会拒绝包含小数点但是小数点后面没有数字的数字。将该表达式改为以\d*
结尾,整个表达式将变得可选,从而导致它可以匹配上述第二个列表中的条目。但通过使用捕获组和布尔OR运算符(|
)来要求至少在小数点之后或之前有至少一个数字,所有基本情况均被覆盖。更新(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
If you have this val="-12XXX.0abc23"
and you want to extract only the decimal number, in this case this regex (^-?[0-9]\d*(\.\d+)?$
) will not help you to achieve it.
this is the proper code with the correct detection regex:
var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);
-
或+
字符: ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
我在Django的URL中进行了一些正则表达式实验,需要匹配从负数到正数的数字。
^(?P<pid>(\-\d+|\d+))$
让我们集中关注这个(\-\d+|\d+)
部分,忽略其他内容,这个分号|
在正则表达式中表示或,因此负值将与\-\d+
匹配,正值将与\d+
匹配。
这将允许正整数和负整数
ValidationExpression="^-?[0-9]\d*(\d+)?$"