十进制数字正则expression式,其中十进制数字是可选的

我需要一个正则expression式来validation一个数字,但不需要小数点后的数字。 即。

123 123. 123.4 

都将是有效的

 123.. 

将是无效的

任何将不胜感激!

使用以下内容:

 /^\d*\.?\d*$/ 
  • ^ – 行的开始;
  • \d* – 0或更多位数;
  • \.? – 一个可选的点(转义,因为在正则expression式中, .是一个特殊字符);
  • \d* – 0或更多位(小数部分);
  • $ – 行结束。

这允许使用.5十进制而不是要求前导零,如0.5

 /\d+\.?\d*/ 

一个或多个数字( \d+ ),可选的句点( \.? ),零个或多个数字( \d* )。

根据您的使用情况或正则expression式引擎,您可能需要添加开始/结束行锚点:

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

正则表达式可视化

Debuggex演示

您需要像下面这样的正则expression式才能正确执行:

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

与空白相同的expression式,使用扩展修饰符(由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 (ie no extra characters remaining) /x # Extended modifier (allows whitespace & comments in regular expression) 

例如,它将匹配:

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

并会拒绝这些非数字:

  • 。 (单小数点)
  • – 。 (负小数点)
  • +。 (加小数点)
  • (空string)

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

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

试试这个正则expression式:

 \d+\.?\d* 

\ d +数字在可选小数之前
。? 可选的小数(由于量词)
\ d *十进制后的可选数字

我结束了使用以下内容:

 ^\d*\.?\d+$ 

这使得以下无效:

 . 3. 

我认为这是最好的(符合所有要求):^ \ d +(\。\ d +)?$

 (?<![^d])\d+(?:\.\d+)?(?![^d]) 

干净而简单。

这使用后缀和前缀RegExfunction。

它直接为IsMatch条件返回true – false

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

想出了这个。 允许使用整数和小数,但如果决定input小数,则强制使用完整的小数(前导和尾随数字)。

在Perl中,使用Regexp :: Common将允许您为特定的数字格式组装一个精细调整的正则expression式。 如果您不使用Perl,则生成的正则expression式通常仍可以被其他语言使用。

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

 $ 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]+))|)) 

这就是我所做的。 它比上面任何一个更严格(而且比一些更正确):

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

通过的string:

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

失败的string:

 . 00000 01 .0. .. 00.123 02.134