我需要匹配 5 次出现的逗号分隔货币值。
我确实有这个 reg ex 可以完成这项工作,但我认为这不是最好的方法。
^(\$[0-9]{1,3}(?:[,.]?[0-9]{3})*(?:\.[0-9]{2})?,\s?){4}(\$[0-9]{1,3}(?:[,.]?[0-9]{3})*(?:\.[0-9]{2})?)$
附注我必须将表达式拆分为匹配的 4 个逗号分隔的事件和 1 个嗅探尾随逗号的事件(我不认为这是这样做的方法)
一些有效的匹配输入可能是,
$200,000,$525,$60000,$120,000,$65,456 (space between currency values is optional)
$200,000, $525, $60000,$120,000, $65,456
一些无效的输入值,
$200,000,$525,$60000,$120,000,$65,456, (Trailing comma)
$200,000,,$525,$60000.$120,000,$65,456,, etc
任何指示将不胜感激。
编辑:我正在寻找的解决方案是一个纯reg ex解决方案(比我上面写的更好),这样我就可以在用户输入错误的输入时立即触发验证。
最佳答案
更新
如果您想在验证价格时进行匹配,您可以执行以下操作:
包括点和逗号以格式化价格
价格之间最多有一个空格
^\$\d+([,.]\d{3})*( ?, ?\$\d+([,.]\d{3})*){4}$
分割:
^
匹配输入字符串的开头(如果设置了m
标志,则匹配行)\$\d+
匹配多个数字前面的$
(
分组开始 (#1
)[,.]\d{3}
匹配 3 位数字前面的句点或逗号
)*
分组结束 (#1
),至少匹配零次(
分组开始 (#2
)?, ?
匹配由可选空格包围的逗号(两侧各一个空格)\$\d+
匹配多个数字前面的$
([,.]\d{3})*
匹配 3 位数字(千位分隔符)前面的句点或逗号,至少匹配零次
){4}
分组结束 (#2
),精确重复 4 次$
输入字符串结尾(如果设置了m
标志则为行)
JS代码:
var re = /^\$\d+([,.]\d{3})*( ?, ?\$\d+([,.]\d{3})*){4}$/g;
var prices = ['$200,000,$525,$60000,$120,000,$65,456',
'$200,000, $525, $60000,$120,000, $65,456',
'$200,000,$525,$60000,$120,000,$65,456, ',
'$200,000,,$525,$60000.$120,000,$65,456,,'];
prices.forEach(function(s) {
console.log(s + " => " + Boolean(s.match(re)))
})
关于javascript - 匹配 5 个(精确)逗号分隔货币值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50272869/