如何通过这个正则表达式来匹配负数? 这个正则表达式可以很好地处理正值,但我希望它也允许负值,例如-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'));
一些正则表达式示例:
正整数:
^\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}$
我不知道为什么你首先需要它
[0-9]
。
尝试:
^-?\d*(\.\d+)?$
更新
如果您想确保个位上有数字,请使用
^-?\d+(\.\d+)?$
在
"-" 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”结尾的字符串希望,这将有助于理解问题中发布的正则表达式。
更新(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
我最近遇到一个案例,学生只在数字响应字段中输入可接受的字符,但仍然设法破坏了东西。因此,我最终使用了以下包罗万象的方法。
^[+-]?((\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
运算符 (|
) 的捕获组来要求 之后或 小数点之前至少有一位数字,所有基数都被覆盖。
仅当后跟数字时才允许使用
-
或 +
字符:
^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
我在django url中有一些关于正则表达式的实验,需要从负数到正数
^(?P<pid>(\-\d+|\d+))$
让我们专注于这个
(\-\d+|\d+)
部分,忽略其他部分,这个分号|
在正则表达式中意味着OR,那么负值将与这个\-\d+
部分匹配,而正值将与这个\d+
匹配
如果你有这个
val="-12XXX.0abc23"
并且你只想提取十进制数,在这种情况下这个正则表达式(^-?[0-9]\d*(\.\d+)?$
)将无法帮助你实现它。var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);
这将允许正整数和负整数
ValidationExpression="^-?[0-9]\d*(\d+)?$"
^[+-]?\d{1,18}(\.\d{1,2})?$
接受正或负的小数值。
只需添加 0 或 1 标记即可:
^-?[0-9]\d*(.\d+)?$
仅对于负数,这是完美的。
^-\d*\.?\d+$
数字的正则表达式,可选小数点,可选负数:
^-?(\d*\.)?\d+$;
适用于负整数、小数、带小数的负数
^(-?\d+\.)?-?\d+$
允许:
23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
简单地
/\d/
对于我能想到的所有情况都按预期工作:
let ns = {
regex: {
num: /\d/
}
}
for (let i of [-2, -1, 0, 1, 2, 'one', 'negative one', Math.PI, Math.E, (42 * -1), (42 / -1), '-1', '0', '1', 1.01, -1.01, .1, -.1, Math.sqrt(42)]) {
console.log(ns.regex.num.test(i) + ': ' + i);
}
欲了解更多
Math
的乐趣,请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math
对于 Dart,它将支持正负两位小数
RegExp(r'(^[-+]?\d*\.?\d{0,2})')