RegExp用于验证PRICE

use*_*521 -3 javascript regex validation

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

不应该允许:

  • 白色空间
  • 字母
  • 负值

应该允许:

  • 数字
  • 逗号
  • 小数点

CSᵠ*_*CSᵠ 8

RegExp用于验证价格字段:

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

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

要验证的Javascript代码:

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

仅在格式正确时才会验证,在各自的位置使用点或逗号.

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
  • 2991234
  • 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>";
})
Run Code Online (Sandbox Code Playgroud)
<div id="results"></div>
Run Code Online (Sandbox Code Playgroud)


rya*_*ill 5

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

^[\d\.,]+$

编辑:

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

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

  • 惊人的!我要`,,,,,,,,` 美元,请。 (7认同)
  • @JackManey Hahaha 但从技术上讲,它遵循“应该允许数字、逗号和小数” (4认同)