我需要一个验证数字的正则表达式,但不需要小数点后的数字。IE。
123
123.
123.4
都是有效的
123..
将是无效的
任何将不胜感激!
使用以下内容:
/^\d*\.?\d*$/
^
- 行首;\d*
- 0 个或多个数字;\.?
- 一个可选的点(转义,因为在正则表达式中,.
是一个特殊字符);\d*
- 0 位或更多位(小数部分);$
- 队伍的尽头。这允许 0.5 小数,而不需要前导零,例如 0.5
/\d+\.?\d*/
一位或多位数字 ( \d+
)、可选句点 ( \.?
)、零位或多位数字 ( \d*
)。
根据您的使用情况或正则表达式引擎,您可能需要添加开始/结束行锚点:
/^\d+\.?\d*$/
你需要一个像下面这样的正则表达式才能正确地做到这一点:
/^[+-]?((\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)
例如,它将匹配:
并将拒绝这些非数字:
更简单的解决方案可能会错误地拒绝有效数字或匹配这些非数字。
这符合所有要求:
^\d+(\.\d+)?$
试试这个正则表达式:
\d+\.?\d*
\d+ 可选小数之前的数字
.? 可选小数(可选由于 ? 量词)
\d* 小数后可选数字
我最终使用了以下内容:
^\d*\.?\d+$
这使得以下内容无效:
.
3.
你可以使用这个:
^\d+(\.\d)?\d*$
比赛:
11
11.1
0.2
不匹配:
.2
2.
2.6.9
^[+-]?(([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
及其签名的等价物,以及空字符串。
这就是我所做的。它比上述任何一个都更严格(并且比某些更正确):
^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
什么语言?在 Perl 风格中:^\d+(\.\d*)?$
您所问的问题已经得到解答,因此如果输入可选小数点,这只是对于那些只想要 2 个小数位的人的附加信息:
^\d+(\.\d{2})?$
^ : 字符串的开头
\d : 一个数字 (等于 [0-9])
+ : 一次和无限次
正在捕获组 (.\d{2})?
? : 零次和一次。: 特点 。
\d : 一个数字 (等于 [0-9])
{2} : 正好是 2 倍
$ : 字符串结尾
1:匹配
123:匹配
123.00:匹配
123.:不匹配
123..:不匹配
123.0:不匹配
123.000:不匹配
123.00.00:不匹配
(?<![^d])\d+(?:\.\d+)?(?![^d])
干净简单。
这使用了后缀和前缀、RegEx 功能。
对于 IsMatch 条件,它直接返回 true - false
^\d+(()|(\.\d+)?)$
想出了这个。允许整数和小数,但如果您决定输入小数,则强制使用完整的小数(前导和尾随数字)。
尝试这个。^[0-9]\d{0,9}(\.\d{1,3})?%?$
它经过测试并为我工作。
^\d+((.)|(.\d{0,1})?)$
如果您想允许多于一个数字,请使用而不是\d+
如果您想在昏迷后最多允许两个数字,请使用而不是。请参阅下面的示例以供参考:\d{0,1}
\d{0,2}
\d{0,1}
或者
^\d+((.)|(.\d{0,2})?)$
或者
^\d+((.)|(.\d+)?)$
在这里玩正则表达式:https ://regex101.com/
在 Perl 中,使用 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]+))|))