jQuery的正则表达式满足这些条件?

时间:2014-01-26 18:37:37

标签: javascript regex pattern-matching

我有一个可以拥有的字段:

  • 最多可能有2位小数
  • 最多可能有6个非小数位
  • 一共不超过8位数(最多2位小数加上最多6位非小数位数)
  • 是一个正数

所以正确的输入范围是0.01到999999.99,尾随的零不是问题,所以4.00和4一样好。

3 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

  • 最多可能有2位小数:(\.\d{1,2})? - 这将匹配小数点后跟最小值1,最多2位数。这是可选的。
  • 最多可能有6个非小数位:\d{1,6} - 这将匹配最少1位数,最多6位数。
  • 一共不超过8位数(最多2位小数加上最多6位非小数位数):您可以梳理上述两位数来获得此结果:\d{1,6}(\.\d{1,2})?
  • 为正数:将上述内容更改为:^\d{1,6}(\.\d{1,2})?$。这应该确保您传递给它的任何数字都不以负号开头。 ^$锚点指示正则表达式引擎在字符串的开头开始匹配,并在结束时完成匹配。这应该允许您确保您匹配的字符串确实是一个数字。

话虽这么说,你应该使用你的语言(在这种情况下是JavaScript)提供的适当的数学运算来进行数值范围检查。你所追求的数值范围的微小变化很可能会使你的正则表达式发生很大的变化。

答案 1 :(得分:0)

尝试这种模式:

^[0-9]{1,6}(?:\.[0-9]{1,2}0*)?$

如果您想允许前导空格和尾随空格,请在\s*之后和^之前添加$到模式的开头和结尾。

也就是说,如果没有正则表达式,您可能希望完成此任务。为什么不直接读取输入的值,解析它然后只是执行数字验证?你甚至可以将输入舍入到两位小数。

答案 2 :(得分:0)

这可能会验证它

 #  /^(?=.*[1-9].*$)(?=[.]?(?:\d[.]?){1,8}$)(?=\d{0,6}(?:[.]\d{0,2})?$)/

 ^ 
 (?=                      # must be a positive number
      .* [1-9] .* $ 
 )
 (?=
      [.]? 
      (?:                 # 1 to 8 digits
           \d 
           [.]? 
      ){1,8}
      $ 
 )
 (?=
      \d{0,6}             # 0 to 6 non-decimal places
      (?:
           [.]            # 0 to 2 decimal places
           \d{0,2} 
      )?
      $ 
 )