理解数字范围的正则表达式

时间:2011-01-26 15:12:17

标签: c# asp.net regex

我正在尝试构建一些正则表达式来验证一些文本框控件。我做了一些研究和测试,但不能让这个工作。我试图创建正则表达式的示例如下:

  1. 范围0-45,0小数位
  2. 范围0-20,小数点后2位
  3. 范围16-65,0小数位
  4. 范围0-99,小数点后2位
  5. 范围0-1500000,0小数位
  6. 范围0-200,小数点后1位
  7. 分别为1和5,我使用了

    ([0-9]|[0-9]\d|45)$  
    ([0-9]|[0-9]\d|1500000)$  
    

    我遇到问题的第一个是年龄范围16-65(含),我想要没有小数位。在这里发布帖子(Regular expression to allow numbers between -90.0 and +90.0)后,我想我可以使用逻辑并让它得到怀疑,但不能!

    我得到的表达是:

    (\d|([1-6][6-4]))|65  
    

    有人可以告诉我,我误解了这个!对上述其他例子的任何帮助都将受到热烈欢迎。

2 个答案:

答案 0 :(得分:8)

很抱歉这样说,但你的正则表达不会起作用。请记住,正则表达式旨在匹配文本数据。虽然可以使用它们来匹配数字,但它并不是真正的选择工具。

如果 使用正则表达式,则需要考虑数字范围的可能文本表示。

对于示例1 ,即:

  1. 一个数字
  2. 或1到3之间的数字,后跟任何数字
  3. 或4,后跟0到5之间的数字。
  4. 作为正则表达式:

    ^(?:\d|[1-3]\d|4[0-5])$
    

    ^$锚点确保评估整个字符串; (?:...)对交替进行分组,并将其与锚点“屏蔽”。

    对于示例3

    1. 要么是1,要么是6-9
    2. 或2-5,后跟任何数字
    3. 或6,然后是0-5
    4. 作为正则表达式:

      ^(?:1[6-9]|[2-5]\d|6[0-5])$
      

      对于示例5

      1. 1-5位数
      2. 或1,然后是0-4,接着是任意四位数
      3. 或150000。
      4. 作为正则表达式:

        ^(?:\d{1,5}|1[0-4]\d{4}|150000)$
        

        等等。

        添加小数位并不是很困难:

        • \.\d{2}适用于两位小数
        • \.\d{1,3}小数点后1到3位
        • (?:\.\d{1,2})表示0到2位小数(仅当至少有一位数字时才允许使用点数。)

答案 1 :(得分:2)

16 - 65包含的逻辑是1 plus 6-9 OR 2-5 plus 0-9 OR 6 plus 0-5

我认为1[6-9]|[2-5][0-9]|6[0-5]