RegEx用于验证PRICE

时间:2013-04-11 21:02:48

标签: javascript regex validation

我正在尝试验证价格字段:

不允许

  • 白色空间
  • 字母
  • 负值

应该允许

  • 数字
  • 逗号
  • 小数

3 个答案:

答案 0 :(得分:8)

用于验证价格字段的RegExp:

/^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/

解释演示:http://regex101.com/r/uG5lI0/1

要验证的Javascript代码:

/^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/.test(input)

仅在格式正确的情况下验证,在各自的位置使用点或逗号。

en_US语言环境的国际格式&美国国家格式:

  • 134.56
  • 1,234.56
  • 2,991,234.00

意大利国家格式,包含2位小数:

  • 134,56
  • 21.234,56
  • 1.234,56
  • 9.321.234,56

de_DE语言环境的国际格式:

  • 134,56
  • 1234,56
  • 98281234,56

小数是可选的,验证全部金额:

  • 1234
  • 1,234
  • 2,991,234
  • 1.234
  • 9.321.234

function validatePrice(input) {
  return /^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/.test(input);
}

['WRONG',
  '1,234,56',
  '1.234.56',
  '-1993',
  '918,27.63',
  '122.42.24',
  '1,89,2',
  '',
  'Intl. format & US national format',
  '2.56',
  '14.56',
  '134.56',
  '1,234.56',
  '2,991,234.00',
  '',
  'Italian national format with 2 decimals',
  '9,56',
  '24,56',
  '134,56',
  '721.234,56',
  '21.234,56',
  '1.234,56',
  '9.321.234,56',
  '69.321.234,56',
  '269.321.234,56',
  '1.269.321.234,56',
  'International format for the de_DE locale',
  '1,56',
  '14,56',
  '134,56',
  '1234,56',
  '98281234,56',
  'No cents',
  '1',
  '14',
  '134',
  '1,234',
  '2,991,234',
  '9',
  '24',
  '134',
  '1.234',
  '9.321.234',
  '1',
  '14',
  '134',
  '1234',
  '98281234'
].forEach(function(n) {
  document.getElementById('results').innerHTML += "'" + n + "' => " + validatePrice(n) + "<br>";
})
<div id="results"></div>

答案 1 :(得分:4)

这个正则表达式应该这样做:

^[\d\.,]+$

修改

这是一个更好的正则表达式,允许更多理智的数字格式(美元)。仍然不完美 - 需要确切知道你期望的验证,如果不是这样的话。

^(\d{1,3})?(,?\d{3})*(\.\d{2})?$

答案 2 :(得分:2)

最简单的方法就是包含您想要的东西并排除其他所有内容。看起来你想要数字,逗号和句号。这个正则表达式看起来像/^[\d.,]+$/。这不指定格式的任何顺序。如果你想让逗号只出现在3位数组(不是国际化,但对美国有用),你需要更像/^\d{,3}(,\d{3})*(\.\d+)?$/ - 0-3位后跟0或更多组的' ,NNN'带有可选的'.N')。

如果您想单独检测想要避免的事物,可以使用/[-A-z \t]/ - 破折号,字母(上部和下部),空格或制表符。