正则表达式没有美元符号的钱吗?

时间:2012-02-03 04:45:30

标签: regex

我需要一个正则表达式来检查数值,以确保它在“。”之后有两个小数位。例如。 0.01,0.10可以,但2.0或0.1不行。 0.00或0或0.0

也不行

用于货币。但是,我不需要担心$符号或逗号。

4 个答案:

答案 0 :(得分:3)

[0-9]+\.[0-9][0-9](?:[^0-9]|$)

我不认为相同的正则表达式是正确的检查0.00(如果你真的需要) - 使用其他代码,而不是一个非常复杂的正则表达式。

答案 1 :(得分:0)

[0-9] + \。[0-9] [0-9]

那是

  • 小数点前至少一个十进制数字
  • 一个小数字小数点
  • 在点<​​/ li>之后的两位十进制数字

你没有提到你正在使用哪种正则表达式,但是它们中的任何一种都会接近。

答案 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