-3

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

不应允许

  • 空白
  • 字母
  • 负值

应该允许

  • 数字
  • 逗号
  • 小数点
4

3 回答 3

12

用于验证价格字段的正则表达式:

/^(\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>

于 2013-04-12T09:42:06.227 回答
5

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

^[\d\.,]+$

编辑:

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

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

于 2013-04-11T21:08:20.710 回答
4

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

如果你想单独检测你想避免的事情,你可以使用类似的东西/[-A-z \t]/——破折号、字母(上下)、空格或制表符。

于 2013-04-11T21:11:01.383 回答