用于接受整数、小数值并按最大值限制的正则表达式

Rak*_*khi 1 regex integer decimal range

我需要一个仅接受 1 到 9999.99 之间的整数或小数的正则表达式。我试过这个

^(?:[1-9][0-9]{0,4}(?:.d{1,2})?|9999|9999.99)$
Run Code Online (Sandbox Code Playgroud)

但它也接受 10000。

The*_*ird 5

该模式存在一些问题:

  • 这部分[1-9][0-9]{0,4}可以匹配1-5位数字,因为量词是0-4次,所以它也可以匹配10000
  • 你不需要9999|9999.99,因为那些已经可以匹配1-9][0-9]{0,4}
  • 该部分.d匹配除换行符和后跟字符之外的任何字符d。您必须转义两者才能匹配字面上的点和单个数字
  • 通过这些更改,您可以省略外部捕获组

更新后的模式如下所示:

^[1-9]\d{0,3}(?:\.\d{1,2})?$
Run Code Online (Sandbox Code Playgroud)
  • ^字符串的开头
  • [1-9]\d{0,3}匹配单个数字 1-9 并重复数字 0-9 0 到 3 次
  • (?:\.\d{1,2})?可选择匹配 a.和 1 或 2 位数字
  • $字符串结尾

正则表达式演示