验证十进制的正则表达式(18,3)

时间:2013-09-29 09:45:20

标签: regex validation

我需要一个可以验证Decimal (18,3)的正则表达式,意思是精度为18,比例为3.

需要通过以下标准:

  • 逗号前的最大位数为15
  • 逗号后面的最大位数为3

有效示例

123456789.123
123456789123456.12
12345.1
123456789123456

无效示例

1234567891234567
123.1234
1.12345
.1234

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

首先,字符.称为点,句号,句号或小数点,而逗号是字符:,

其次,您可以在字符类中指定正则表达式中的数字:[0-9]表示0到9之间的任何数字。

正则表达式中的一个点将匹配任何字符,因此您需要通过反斜杠(或将其放在字符类中)来逃避它。

请记住,同一个字符类中的元素可以按任意顺序排列,因此如果您想获得具有数字和点的内容并使用[0-9.],它将匹配任何数字或点。< / p>

现在,您需要为您的任务提供有限量词,这些量词由{m,n}形式的大括号指定,其中m是最小值,n是最大值。如果您现在使用... [0-9.]{1,15},则意味着字符类[0-9.]重复1次,最多15次。

但如果您使用[0-9.]{1,15},它也会匹配......1234(请记住我之前说的顺序并不重要。

所以,应用所有这些,你得到了正则表达式:

[0-9]{1,15}\.[0-9]{1,3}

现在,由于您正在进行验证,因此需要锚点来指定正则表达式应该测试整个字符串(而不是简单地找到匹配项)。

^[0-9]{1,15}\.[0-9]{1,3}$

最后,因为你可以有可选的小数,你必须使用一个组和量词?,这意味着0或1:

^[0-9]{1,15}(?:\.[0-9]{1,3})?$

在你的代码中,你将创建一个像这样的正则表达式:

string myString = "123456789.123";
var regexp = new Regex(@"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
var setMatches = regexp.Matches(myString);
foreach (Match match in setMatches)
{
    Console.WriteLine(match.Groups[0].Value);
}

如果它通过正则表达式,则输出小数。

或类似的东西:

string myString = "123456789.123";
Match match = Regex.Match(myString, @"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
if (match.Success)
{
    Console.WriteLine(match.Groups[0].Value);
}

答案 1 :(得分:1)

这个正则表达式适合你:

/^\d{1,15}(\.\d{1,3})?$/

在Java中:

Pattern p = Pattern.compile("^\\d{1,15}(\\.\\d{1,3})?$");

答案 2 :(得分:0)

试试这个

  String str="Your input";
    Pattern pattern = Pattern.compile("^\\d{1,15}($|(\\.\\d{1,3}$))");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.output.Println(matcher.group());
    }

在c#中试试这个

    MatchCollection mc = Regex.Matches("your text", "^\d{1,15}($|(\.\d{1,3}$))");
             foreach (Match m in mc)
             {
                Console.WriteLine(m);
            }