我正在尝试验证价格字段:
不应允许:
- 空白
- 字母
- 负值
应该允许:
- 数字
- 逗号
- 小数点
/^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/
解释演示:http ://regex101.com/r/uG5lI0/1
/^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/.test(input)
仅在格式正确且在各自位置带有点或逗号的情况下才会进行验证。
en_US 区域设置和美国国家格式的国际格式:
带 2 位小数的意大利国家格式:
de_DE 语言环境的国际格式:
小数是可选的,验证整数:
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>
这个正则表达式应该这样做:
^[\d\.,]+$
编辑:
这是一个更好的正则表达式,允许更健全的数字格式(美元)。仍然不完美 - 如果不是这样,则需要确切知道您期望什么验证。
^(\d{1,3})?(,?\d{3})*(\.\d{2})?$
最简单的方法是只包含您想要的内容并排除其他所有内容。看起来您需要数字、逗号和句点。一个正则表达式看起来像/^[\d.,]+$/
。这没有指定任何格式的顺序。例如,如果您希望逗号仅出现在 3 位数字组中(国际化不是很好,但对美国有用),您需要更多类似的东西/^\d{,3}(,\d{3})*(\.\d+)?$/
- 0-3 位数字后跟 0 组或更多组 ',NNN' 和可选的'.N')。
如果你想单独检测你想避免的事情,你可以使用类似的东西/[-A-z \t]/
——破折号、字母(上下)、空格或制表符。