我需要一个正则表达式来检查数值,以确保它在“。”之后有两个小数位。例如。 0.01,0.10可以,但2.0或0.1不行。 0.00或0或0.0
也不行用于货币。但是,我不需要担心$符号或逗号。
答案 0 :(得分:3)
[0-9]+\.[0-9][0-9](?:[^0-9]|$)
我不认为相同的正则表达式是正确的检查0.00(如果你真的需要) - 使用其他代码,而不是一个非常复杂的正则表达式。
答案 1 :(得分:0)
[0-9] + \。[0-9] [0-9]
那是
你没有提到你正在使用哪种正则表达式,但是它们中的任何一种都会接近。
答案 2 :(得分:0)
你还没有指定你正在寻找什么样的正则表达式,或者将使用哪种语言。由于不是所有的都有Perl风格的正则表达式和?:
这样的符号,这里是你想要的ERE
/^(0\.([1-9][0-9]|[0-9][1-9])|[1-9][0-9]*\.[0-9][0-9])$/
这里的逻辑是你必须在小数的左侧或右侧有一个非零,并且对它的评估需要两个单独的正则表达式由|
连接。在左侧,所有以0开头的值必须在小数点右侧的某个位置。在右侧,我们可以允许零美元数字,但前提是左侧以非零开头。
正如Devin所说,这是一个更复杂的正则表达式,因为要求避免零值。我支持他的建议,你应该与正则表达式分开进行数值评估。
更新(每条评论):
以下是RE的详细分类:
我们有两个基本的子表达式,我们正在处理:
/^(0\. |[1-9][0-9]*\. )$/
第一个子表达式匹配以零开头的所有内容。第二个匹配以非零开头的所有内容。
([1-9][0-9]|[0-9][1-9])
对于以零开头的事物,请确保以下两个字符至少包含一个不为零的字符。
|
或...(这是最左边括号中的表达式)
[1-9][0-9]*\.
匹配以零以外的东西开头的东西......
[0-9][0-9])$/
因为我们已经有了正值,所以这些可以包含00美分。
清除?
答案 3 :(得分:0)
您可以使用lookaround:
/^(?!0\.00)\d+\.\d{2}$/
这是一个perl实现:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my $re = qr/^(?!0\.00)\d+\.\d{2}$/;
while(<DATA>) {
chomp;
say (/$re/ ? "OK : $_" : "KO : $_");
}
__DATA__
1
2.2
1.23
0.01
0.00
12.345
<强>输出:强>
KO : 1
KO : 2.2
OK : 1.23
OK : 0.01
KO : 0.00
KO : 12.345