我需要一个验证数字的正则表达式,但不需要小数点后的数字。 即
123
123.
123.4
一切都有效
123..
无效
任何人都将不胜感激!
答案 0 :(得分:159)
使用以下内容:
/^\d*\.?\d*$/
^
- 行的开头; \d*
- 0位或更多位数; \.?
- 一个可选的点(已转义,因为在正则表达式中,.
是一个特殊字符); \d*
- 0位或更多位数(小数部分); $
- 行尾。这允许.5十进制而不是要求前导零,例如0.5
答案 1 :(得分:97)
/\d+\.?\d*/
一个或多个数字(\d+
),可选期间(\.?
),零个或多个数字(\d*
)。
根据您的使用情况或正则表达式引擎,您可能需要添加开始/结束行锚点:
/^\d+\.?\d*$/
答案 2 :(得分:62)
您需要使用如下正则表达式来正确执行此操作:
/^[+-]?((\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)
例如,它将匹配:
并将拒绝这些非数字:
更简单的解决方案可能会错误地拒绝有效数字或匹配这些非数字。
答案 3 :(得分:7)
试试这个正则表达式:
\d+\.?\d*
\ d +可选小数前的数字
。?可选小数(由于?量词可选)
\ d *十进制后的可选数字
答案 4 :(得分:4)
我最终使用了以下内容:
^\d*\.?\d+$
这使得以下内容无效:
.
3.
答案 5 :(得分:3)
用什么语言?在Perl风格中:^\d+(\.\d*)?$
答案 6 :(得分:3)
我认为这是最好的(符合所有要求): ^ \ d +(\。\ d +)?$
答案 7 :(得分:2)
这就是我所做的。它比上述任何一个都更严格(并且比某些更正确):
^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
答案 8 :(得分:1)
(?<![^d])\d+(?:\.\d+)?(?![^d])
简洁明了。
这使用后缀和前缀,RegEx功能。
它直接返回true - IsMatch条件的错误
答案 9 :(得分:1)
^\d+(()|(\.\d+)?)$
想出来了。允许整数和小数,但如果您决定输入小数,则强制使用完整的小数(前导和尾随数字)。
答案 10 :(得分:1)
您可以使用此:
^\d+(\.\d)?\d*$
匹配项:
11
11.1
0.2
不匹配:
.2
2.
2.6.9
答案 11 :(得分:1)
^[+-]?(([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
及其带符号的等价物以及空字符串。
答案 12 :(得分:0)
在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]+))|))
答案 13 :(得分:0)
您的要求已经得到回答,因此对于那些只需要输入两位小数(如果输入了可选的小数点)的人来说,这只是一个附加信息:
^\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:不匹配
答案 14 :(得分:0)
尝试一下。 ^[0-9]\d{0,9}(\.\d{1,3})?%?$
已通过测试并为我工作。