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

Mar*_*n S 4 c# regex asp.net

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

  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)$  
Run Code Online (Sandbox Code Playgroud)

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

我得到的表达是:

(\d|([1-6][6-4]))|65  
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ker 8

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

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

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

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

正如一个正则表达式:

^(?:\d|[1-3]\d|4[0-5])$
Run Code Online (Sandbox Code Playgroud)

^$锚确保整个字符串评估; 该(?:...)组交替从锚"屏蔽"了.

对于你的例子3:

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

正如一个正则表达式:

^(?:1[6-9]|[2-5]\d|6[0-5])$
Run Code Online (Sandbox Code Playgroud)

对于你的例子5:

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

正如一个正则表达式:

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

等等.

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

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