十进制数正则表达式,其中小数后面的数字是可选的

我需要一个验证数字的正则表达式,但不需要小数后面的数字。 也就是说。

123
123.
123.4

都是有效的

123..

是无效的

任何人都会非常感激!

404121 次浏览

试试这个正则表达式:

\d+\.?\d*

可选小数前的 d + 位数
. ? 可选的小数(由于? 量词可选)
D * 小数后面的可选数字

/\d+\.?\d*/

一个或多个数字(\d+) ,可选周期(\.?) ,零个或多个数字(\d*)。

根据您的使用或正则表达式引擎,您可能需要添加起始/结束行锚:

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

Regular expression visualization

调试演示

使用以下方法:

/^\d*\.?\d*$/
  • ^线路起点;
  • \d*-0或更多数字;
  • \.?-一个可选的点(转义,因为在正则表达式中,.是一个特殊的字符) ;
  • 0或以上数字(小数部分) ;
  • $-终点站。

这允许小数点后0.5,而不需要前导零,例如0.5

什么语言? Perl 风格: ^\d+(\.\d*)?$

这符合所有要求:

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

在佩尔,使用 Regexp: : Common 可以为特定的数字格式组装一个经过精心调优的正则表达式。如果不使用 Perl,生成的正则表达式通常仍然可以由其他语言使用。

打印在 Regexp: : Common: : Number 中生成示例正则表达式的结果:

$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))


$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))


$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))
(?<![^d])\d+(?:\.\d+)?(?![^d])

干净利落。

这使用后缀和前缀,正则表达式功能。

对于 IsMatch 条件,它直接返回 true-false

你需要一个像下面这样的正则表达式来正确地完成它:

/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/

使用扩展修饰符(Perl 支持)的带空格的相同表达式:

/^  [+-]? ( (\d+ (\.\d*)?)  |  (\.\d+) ) $/x

或评论:

/^           # Beginning of string
[+-]?       # Optional plus or minus character
(           # Followed by either:
(           #   Start of first option
\d+       #   One or more digits
(\.\d*)?  #   Optionally followed by: one decimal point and zero or more digits
)           #   End of first option
|           # or
(\.\d+)     #   One decimal point followed by one or more digits
)           # End of grouping of the OR options
$           # End of string (i.e. no extra characters remaining)
/x          # Extended modifier (allows whitespace & comments in regular expression)

例如,它将匹配:

  • 123
  • 23.45
  • 34.
  • .45
  • -123
  • -273.15
  • -42.
  • -45
  • + 516
  • + 9.8
  • + 2.
  • + .5

并将拒绝这些非数字:

  • 。(单小数点)
  • 。(负小数点)
  • + (加小数点)
  • (空字符串)

更简单的解决方案可能会错误地拒绝有效数字或匹配这些非数字。

我最终使用了以下方法:

^\d*\.?\d+$

这使得以下内容无效:

.
3.
^\d+(()|(\.\d+)?)$

想到了这个。同时允许整数和小数,但是如果您决定输入小数,则必须强制输入一个完整的小数(前导数和尾随数)。

这就是我所做的,比以上任何一条都要严格(也比某些条款更正确) :

^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$

经过的字符串:

0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34

失败的字符串:

.
00000
01
.0.
..
00.123
02.134

你可以用这个:

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

比赛:
11
11.1
0.2

不匹配:

2.
2.6.9

你的问题已经得到了回答,所以这只是一个额外的信息,对于那些只想要2个小数位,如果可选的小数点输入:

^\d+(\.\d{2})?$

^ : 字符串的开始
D: 数字(等于[0-9])
+ : 一次无限次 < br >

捕获组(. d {2}) ? ?
0和1次 字幕。
D: 数字(等于[0-9])
正好2倍
$: 字符串的结尾 < br >

比赛开始
123比赛
123.00: 比赛
123没有匹配
123... 不匹配
123.0: 不匹配
123000: 不匹配
123.00.00: 无匹配 < br >

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

应该反映出人们通常认为的格式良好的十进制数。

小数点前面的数字可以是一个数字,在这种情况下可以是0到9,也可以是一个以上的数字,在这种情况下不能以0开头。

如果在十进制符号之前有任何数字,那么十进制及其后面的数字是可选的。否则,小数必须在至少一个数字之后。请注意,小数点后面允许有多个后跟0。

grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'

正确匹配以下内容:

9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001

以及经签署的对等物,但它拒绝接受下列条件:

.
00
01
00.0
01.3

和它们的有符号等价物,以及空字符串。

试试这个。它是测试和我的工作原理。

正则表达式:

^\d+((.)|(.\d{0,1})?)$

使用 \d+而不是 \d{0,1}如果你想让更多的数字使用 \d{0,2}而不是 \d{0,1}如果你想在昏迷后允许多达两个数字。参考下面的例子:

enter image description here

或者

^\d+((.)|(.\d{0,2})?)$

enter image description here

或者

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

enter image description here

解释

(这些是由 regex101生成的)

  • ^断言行开始处的位置
  • \d匹配一个数字(相当于 [0-9])
  • +在一次和无限次之间匹配以前的令牌,尽可能多的匹配,根据需要返回(贪婪)
  • 第一俘虏部队 ((.)|(.\d{0,1})?)
  • 第一选择 (.)
  • 第二俘虏部队 (.)
  • .匹配任何字符(行终止符除外)
  • 第二选择 (.\d{0,1})?
  • 第三俘虏部队 (.\d{0,1})?
  • ?匹配前一个令牌的次数在0到1之间,尽可能多地匹配,根据需要返回(贪婪)
  • .匹配任何字符(行终止符除外)
  • \d匹配一个数字(相当于[0-9])
  • {0,1}匹配前一个令牌的次数在0到1之间,尽可能多地匹配,根据需要返回(贪婪)
  • $断言行尾的位置

沙盒

在这里使用 regex: https://regex101.com/

对于那些想要与 JavaScript 匹配的人来说:

[-+]?(\d+\.?\d*|\.\d+)

比赛:

  • 1
  • + 1
  • -1
  • 0.1
  • -1.
  • + .1

Railroad diagram of the regex

绘图: https://regexper.com/#%5B-%2B%5D%3F%28%5Cd%2B%5C.%3F%5Cd*%7C%5C.%5Cd%2B%29