.net中的正则表达式,用于验证数字

时间:2009-09-11 06:15:15

标签: .net regex

我需要在.net中使用正则表达式

  • 只允许在“。”之后最多两位数。
  • 只允许在“。”之前最多两位数。
  • 的最大长度为5
  • 表示大于0的数字
  • 表示不大于100的数字
  • 在“。”之后的数字不大于11,如5.11,5.10,5.03,5.01,5.06等(不是5.12,5.2,5.3)

示例:

  • 1,100,100.00,58,58.10,1.1,0.02,.2,.02,1.02,11.11,12.00,01.09,1.0等

无效的数字:

  • 1.12,101.12,100.1,100.03,100.65等,以及所有负值

5 个答案:

答案 0 :(得分:2)

^100\.00|\d{1,2}\.(?:11|10|0\d)$
好的,比我想象的要简单。

^100(?:\.00?)?$|^(?:\d{1,2})?(?:\.(?:1|11|10|0\d?))?$

这匹配新的数据集。它目前也匹配.0。

答案 1 :(得分:1)

这个正则表达式是基于Xetius的那个:

^(100(?:\.00?)?|\d{1,2}(?:\.(?:11|10|0\d|0|1))?)$

下面是我测试它的代码:

class Program
{
    const string Pattern = @"^(100(?:\.00?)?|\d{1,2}(?:\.(?:11|10|0\d|0|1))?)$";
    static void Main(string[] args)
    {
        for (int before = 0; before < 100; before++)
        {
            Test(before.ToString());
            for (int after = 0; after < 12; after++)
            {
                Test(string.Format("{0}.{1:d2}", before, after));
                Test(string.Format("{0:d2}.{1:d2}", before, after));
                Test(string.Format(".{0:d2}", after));
            }
            Test(string.Format("{0}.{1:d}", before, 0));
            Test(string.Format("{0:d2}.{1:d}", before, 1));
        }
        // Special cases:
        Test("100");
        Test("100.0");
        Test("100.00");

        // intended to fail
        Test("00.20");
        Test("00.12");
        Test("00.00x");
        Test("000.00");
        Console.WriteLine("done.");
        Console.ReadLine();
    }

    private static void Test(string input)
    {
        Regex r = new Regex(Pattern);
        if (!r.IsMatch(input))
        {
            Console.WriteLine("no match: " + input);
        }
    }
}

编辑:

  • 调整正则表达式,以便100.0也能正常工作
  • 为意图失败的测试添加了评论

EDIT2:

  • 为.00 - .11添加了测试,并且惊讶于正则表达式已经匹配它们。感谢Xetius

答案 2 :(得分:0)

^(100(\.00?)?|\d\d?(\.(0\d|1[01]?))?)$

答案 3 :(得分:0)

^(?:\d{1,2}(?:\.(?:0?\d|1[01]))?|100)$

答案 4 :(得分:0)

"^100(\.00?)?|\d\d?(\.(1[01]?|0\d?))?$"