Reg Expression Javascript for Millions with limit

时间:2012-03-12 21:00:19

标签: javascript asp.net regex

我希望在javascript中创建一个执行以下操作的正则表达式:

  1. 允许一个或多个号码
  2. 然后有一个可选的句号(“。”)
  3. 然后有一个可选的位数,最多6个
  4. 上下文是我需要人们输入数百万的数值,我希望他们至少包含一个0,如果他们输入数千...所以他们可以输入以下内容:

    1(将是一百万) 0.725(将是725k) 10.5(将是10M 500K)

    我还需要确保价值不超过725.00(或725百万)。

    提前致谢。

2 个答案:

答案 0 :(得分:1)

听起来像是:

/^(?!\d{4})(?![89]\d\d)(?!7[3-9]\d)(?!72[6-9])(?!725\.0*[1-9])(0|[1-9]\d*)(\.\d{1,6})$/

表示:

  • 不以四位数字开头(即小于1000
  • 不以89开头,后跟两位数字(即小于800
  • 不以73开头 - 79后跟一位数字(即小于730
  • 不以726 - 729开头(即小于726
  • 不以725.开头,后跟零或多个零后跟非零数字(即小于或等于725.00)。
  • 01 - 9开头,后跟零位或更多位
  • 之后,可选择一个小数点,后跟一到六位数

那就是说,我实际上建议将上面的内容作为几个单独的检查来实现,而不是像上面那样把它全部塞进一个正则表达式中。特别是,“小于或等于725.00”检查可能更好地使用数字比较来实现;即使您确实想要使用正则表达式,您可能希望将其检测为0.1asefawe的单独错误,以便您可以提供更准确的错误消息。

答案 1 :(得分:0)

所以基本上你想要一个乘以10 ^ 6的数字来得到真值。

这听起来像是一个双步器;首先,验证输入字符串是否符合您期望的格式(您可以非常轻松地使用正则表达式)。然后,将字符串解析为数字变量并测试实际值。该正则表达式模式看起来像"[0-9]{1,3}(\.[0-9]{1,6})?",基本上匹配一个数字,最多3个整数和6个小数位,小数位和小数位是可选的。如果它匹配此模式,那么它可以解析为一个数字,然后您可以快速检查您的数字< = 725。

老实说,我认为创建一个可以验证正确数字格式和包含最大范围的正则表达式是不可行的,但这是一个开始:

"^(725(\.0{1,6})|(([7][2][0-4]|[7][0-1][0-9]|[1-6][0-9]{2}|[1-9][0-9]|[0-9])(\.[0-9]{1,6})?)$"

这将允许从0到724的任何自然整数,任何小数部分从“.000001”到“.999999”最多六位数。它分阶段完成;它将匹配720-724,或700-719,或任何三位数字,最多699,或任何两位数字,或任何一位数字。然后,它还将显式匹配数量“725”,带有可选的小数点和最多6个零。

编辑:虽然你的评论声明你使用了这种模式,并且它确实产生了正确的结果,但我原本打算将它作为“不该做的事情”;评估此模式的成本远远高于第一个解决方案,只是为了避免服务器端规则检查。而且无论如何你都必须执行服务器端验证;在用户浏览器范围内完成的任何操作都应该是可疑的,因为用户可以禁用JavaScript,甚至可以使用像FireBug这样的浏览器插件来使HTML页面按照他想要的方式运行,而不是像你设计的那样。