javascript - 匹配 5 个(精确)逗号分隔货币值的正则表达式

标签 javascript regex

我需要匹配 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}$

Live demo

分割:

  • ^ 匹配输入字符串的开头(如果设置了 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/

相关文章:

java - 正则表达式将句子拆分为单词

python - 用 pandas 中的其他列子字符串替换子字符串

javascript - 如何清除webview chrome App中的缓存?

javascript - 错误: The requested resource could not be found

javascript - Redis命令列出所有订阅redis channel 的订阅者

javascript - 使用javascript增加html十六进制字符代码

python - 在mysql加载数据文件导入期间删除CSV公式值

regex - 使用 Perl,使用 HashMap 在数组中搜索单词

javascript - 从 Javascript 对象中的 CSV 中检索解析的数据(使用 Papa Parse)

javascript - 正则表达式:不使用正向回顾的等效表达式