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

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

  1. 范围0-45,0位小数
  2. 范围0-20,小数点后2位
  3. 范围16-65,小数点后0位
  4. 范围0-99,小数点后2位
  5. 范围0-1500000,0小数位
  6. 范围0-200,小数点后1位

分别为1和5,我用过

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

我遇到问题的第一个是年龄范围16-65(含),我想要没有小数位。 在这里发帖后( 正则表达式允许数字在-90.0和+90.0之间 )我以为我可以使用逻辑并让它怀疑,但不能!

我得到的表达是:

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

有人可以告诉我,我误解了这个! 如果对上述其他例子有任何帮助,我们将非常感激。

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

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

对于您的示例1 ,那将是:

  1. 要么是一个数字
  2. 或1到3之间的数字,后跟任何数字
  3. 或4,然后是0到5之间的数字。

正如一个正则表达式:

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

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

对于你的例子3

  1. 要么是1,要么是6-9
  2. 或2-5,然后是任何数字
  3. 或者是6,然后是0-5

正如一个正则表达式:

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

对于你的例子5

  1. 1-5位数
  2. 或1,然后是0-4,然后是任意四位数
  3. 或150000。

正如一个正则表达式:

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

等等。

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

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

16 - 65包括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]