正则表达式 - 使用最多5000个数字验证数字,小数点后1位

时间:2016-02-22 11:56:26

标签: regex

我正在尝试创建regular expression,其中可以使用范围为b / w 0 - 5000且最多为one decimal place的数字。

i.e. 5000 , 4999.9 , 25.0 , 2500.9

我试过跟随正则表达式,但不知道我需要在哪里添加小数点。

^0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9]|5000)$

2 个答案:

答案 0 :(得分:2)

小数部分可以定义为(?:[.][0-9])?子图案匹配文字点[.]的一个或零个序列,后跟一个数字[0-9]+)。但是,您需要对正则表达式进行一些重新分组:5000必须是一个单独的替代方法,因为它只能有.0小数部分:

^(?:0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9])(?:[.][0-9])?|5000(?:[.]0)?)$
  ^^                                                ^^^^^^^^^^^^^^     ^^^^^^^^^

请参阅regex demo

故障:

  • ^ - 字符串开头
  • (?:0*(?:[0-9]|[1-9][0-9][0-9]?|[1-4][0-9][0-9][0-9])(?:[.][0-9])? - 04999个数字,带或不带前导0符号,后跟一个或零. +任意数字(一次出现)< / LI>
  • | - 或......
  • 5000(?:[.]0)?) - 5000可选地后跟一个或零个序列.0
  • $ - 字符串结尾

答案 1 :(得分:2)

我能想到的最好的是:

/^(5000(\.0)?|([0-4]?\d?\d?\d)(\.\d)?)$/

它基本上将5000作为一个单独的案例,而对于所有其他情况,它更通用,如果有4位数,则将最高有效数字限制为4。 小数点(+一位数)是可选的。

修改 更彻底的模式细分:

  1. |的左侧是5000的特殊情况。它只是数字5000,带有可选的小数点后跟零。
  2. |的右侧:
    一个。 0-4之间的可选数字 湾接下来是两个可选数字
    C。其次是强制性数字
    d。后跟可选的小数点和单个数字
  3. 您可以测试它是否适合here