在可选的小数后调整RegEx需要2位数?

时间:2013-10-03 01:03:52

标签: regex

我相信我已经找到了“完美”正则表达式来检查jQuery Validate中的货币,除非它似乎允许用户在结尾处放置一个单独的十进制数或者在一个数字之后放置一个小数位。 / p>

匹配:700。和3.0

正则表达式:

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

我一直在http://gskinner.com/RegExr/玩它,但似乎无法在正确的地方修改它以修复我的小数问题。

目前它符合我需要的所有内容:

700000 700,000.00 700000

这是jQuery验证器addMethod使用@ Kolink的正则表达式为你好奇的人:

jQuery.validator.addMethod("currency", function(value, element) {
     return this.optional(element) || /^\$?(?=.)(?:[1-9]\d{0,2}(?:,?\d{3})*)?(?:\.\d{2})?$/.test(value);
}, "Please enter a valid number.");

2 个答案:

答案 0 :(得分:5)

在每种情况下,你的正则表达式都说“等等等等,然后可选择一个小数点后跟零到两位数”。

请改为尝试:

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

这是一个更简单的正则表达式,它可以完成当前所有的一切......但更好。

打破它:

  • ^字符串开头
  • \$?可选的美元符号
  • (?=.)至少需要一个字符(因为您的要求是整个部分是可选的,小数是可选的,但至少需要一个)
  • (?:[1-9]\d{0,2}(?:,?\d{3}))*)?可选地匹配整数。该整数可以是千分之一,也可以不是千分之一。必须以非零数字开头。
  • (?:\.\d{2})?可选地匹配一个点后跟两位数字。
  • $字符串结尾

答案 1 :(得分:0)

我会这样做:

^\$?(?=.)([1-9]\d{0,2}((,\d{3})*|\d*))?(0?\.\d\d)?$

使用您的示例查看此live demo