十进制数字正则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