2012-03-12 60 views
-1

我期待的JavaScript来创建一个正则表达式执行以下操作:(“”)reg表达式的Javascript百万行与限

  1. 允许为1个或多个数字
  2. 然后有一个可选的时期
  3. 然后有一个可选的位数可达6

的背景是,我需要有人在数值上百万进入,我想他们至少包括0,如果他们进入ŧ housands ......这样他们就可以输入以下命令:

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

我还需要确保该值没有按超过725.00(或7.25亿美元)。

在此先感谢。

+1

听起来像是你只是要检查的东西是一个数字,在给定的范围内。这不需要正则表达式。 – Orbling 2012-03-12 21:03:09

+0

尝试'parseFloat()',并检查输出与'isNaN()'有效。 (http://en.wikipedia.org/wiki/Law_of_the_instrument)问题 – Orbling 2012-03-12 21:04:21

+1

经典[工具规律。你正在使用错误的工具来完成这项工作。不要使用RegEx检查数字边界。 – zzzzBov 2012-03-12 21:14:37

回答

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})?)$"

这将允许从零到724的任何自然整数,以小数部分最多6个位数从“.000001" 到”。 999999" 。它是分阶段进行的;它将匹配720-724,或700-719,或任何三位数字高达699,或者任何两位数字,或任何一个数字。然后,它也将显式地匹配数量“725”,可选小数点和多达6个零。

编辑:当你使用这个模式,它并产生正确的结果,您的评论的状态,我本来打算它作为“不要做什么”;这种模式比第一种解决方案的评估成本要高得多,只是为了避免服务器端的规则检查。无论如何你必须执行服务器端验证;任何用户的浏览器的范围内进行的应该是犯罪嫌疑人,因为用户可以禁用JavaScript,或者甚至可以使用浏览器插件如Firebug让你的HTML页面的行为,他希望的方式,而不是你设计的方式。

+0

我被光线蒙上了一层阴影。 reg表达式起作用,我添加了比较控件。谢谢! – user1165864 2012-03-12 21:29:41

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 - 01开头后跟数字(即,小于730
  • 不与726开始 - 729(即,小于726
  • 不与725.后跟零首或更多个零开始,然后一非零数字(即小于或等于725.00)。
  • 开始要么0,或1 - 9后跟零个或多个数字
  • 后,后面可以跟一个六位数字

    也就是说之间

一个小数点,其实我建议将上述内容作为几个单独的检查来实现,而不是像上面那样将它们全部整理成一个正则表达式。特别是,“小于或等于 725.00”检查可能更好地使用数字比较来实现;即使你确实想使用正则表达式,你可能也想从 0.1asefawe中将它作为一个单独的错误来检测,所以你可以给出一个更精确的错误消息。

+0

只看这个正则表达式就足以证明它是这个工作的错误工具。 – zzzzBov 2012-03-12 21:15:51

+0

@zzzzBov:的确如此!艾伦玻利斯曾写道:“小心图灵坦克可以让一切都变得可能,但没有任何兴趣是容易的。”正则表达式实际上并不是图灵完成 - 甚至不是完全 - 但即使如此,我认为他们证明了他的观点。 :-) – ruakh 2012-03-12 21:17:44

+0

感谢您侮辱我,您的解释非常有帮助。我决定采纳你的建议,并在现场添加第二个验证器。谢谢! – user1165864 2012-03-12 21:30:51