2

我相信我已经找到了“完美的”正则表达式来检查 jQuery Validate 中的货币,除了它似乎允许用户在末尾放置一个单独的小数或在后面加上一个数字的小数。

匹配数: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/中使用它,但似乎无法在正确的位置修改它来解决我的小数问题。

目前它符合我需要的一切:

700,000 700,000.00 700000

下面是使用@Kolink 正则表达式的jQuery 验证器addMethod,供那些好奇的人使用:

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.");
4

2 回答 2

6

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

试试这个:

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

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

分解它:

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

我会这样做:

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

查看与您的示例一起使用的现场演示。

于 2013-10-03T01:07:38.053 回答