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

问题描述 投票:0回答:18

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

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

谢谢

regex numbers
18个回答
257
投票

您应该在开头添加一个可选的连字符,方法是添加

-?
?
是一个 量词,意思是 出现一次或零次):

^-?[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'));


168
投票

一些正则表达式示例:

正整数:

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

14
投票

我不知道为什么你首先需要它

[0-9]

尝试:

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

更新

如果您想确保个位上有数字,请使用

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

10
投票

"-" 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”结尾的字符串

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


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

3
投票

我最近遇到一个案例,学生只在数字响应字段中输入可接受的字符,但仍然设法破坏了东西。因此,我最终使用了以下包罗万象的方法。

^[+-]?((\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
运算符 (
|
) 的捕获组来要求 之后或 小数点之前至少有一位数字,所有基数都被覆盖。


2
投票

仅当后跟数字时才允许使用

-
+
字符:

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

2
投票

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

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

让我们专注于这个

(\-\d+|\d+)
部分,忽略其他部分,这个分号
|
在正则表达式中意味着OR,那么负值将与这个
\-\d+
部分匹配,而正值将与这个
\d+

匹配

2
投票

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

 \-*\d+

如果使用 C#:

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

2
投票

如果你有这个

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

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


1
投票

这将允许正整数和负整数

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


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

接受正或负的小数值。


0
投票

只需添加 0 或 1 标记即可:

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

0
投票

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

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

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
投票

简单地

/\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


0
投票

对于 Dart,它将支持正负两位小数

RegExp(r'(^[-+]?\d*\.?\d{0,2})')
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.