Javascript Can';t修复十进制数的正则表达式

Javascript Can';t修复十进制数的正则表达式,javascript,regex,Javascript,Regex,我一直在尝试计算货币数字的正则表达式(最多2位小数)。 我试过:(0\)?[1-9]+[\,\.]*[0-9]{0,2}。 它几乎起作用了,只是不起作用。 我正在努力实现以下目标: 仅允许数字、点(.)和逗号(,) 带点(.)或逗号(,)的十进制数 3.14和1.61应该匹配 将点或逗号前的数字限制为9 123456789.12应匹配 123456789123.12不应匹配 小数点后最多2位 3个应该匹配 3.1应匹配 3.14应该匹配 3.1415不应匹配 允许在点或

我一直在尝试计算货币数字的正则表达式(最多2位小数)。
我试过:
(0\)?[1-9]+[\,\.]*[0-9]{0,2}

它几乎起作用了,只是不起作用。

我正在努力实现以下目标:

  • 仅允许数字、点(.)和逗号(,)

  • 带点(.)或逗号(,)的十进制数
    3.14和1.61应该匹配

  • 将点或逗号前的数字限制为9
    123456789.12应匹配 123456789123.12不应匹配

  • 小数点后最多2位
    3个应该匹配 3.1应匹配 3.14应该匹配 3.1415不应匹配

  • 允许在点或逗号之前有一个前导零
    0.12应该匹配 012不应该匹配


这一款适合您:

/^(?:[1-9]\d{0,8}|0)(?:[.,]\d{1,2})?$/
如果您想在一些大文本中进行全局搜索,请尝试

/(?:^|[^\d,.])((?:[1-9]\d{0,8}|0)(?:[.,]\d{1,2})?)(?:[^\d,.]|$)/g
并仅使用捕获组获取货币金额子字符串

const字符串=[
'3.14',
'1,61',
'123456789.12',
'123456789123.12',
'3',
'3.1',
'3.14',
'3.1415',
'0.12',
'012'
];
常量模式=/^(?[1-9]\d{0,8}|0)(?:[,]\d{1,2})$/;
strings.forEach(str=>{
log(str+':'+(str.match(pattern)?'matched':'nonmatched');

});
您几乎肯定希望在开始时使用
^
,在结束时使用
$
,以确保不忽略无关字符。另外,利用在线测试工具,例如Hi PaxForce。我和其他许多人都对你有同感。但您错过了StackOverflow概念的有意设计决策。简言之,StackOverflow需要投票(上下),需要保护投票(下下)的人不被重新认可。这就是为什么投票是匿名的——尽管有解释性的评论是被鼓励的。(顺便说一下,没有一张反对票是我投的。)嘿@Yunnosch-谢谢你花时间向我解释这一点。我希望在stackoverflow上有更多像你这样的人,少一些人通过不加解释的投票来发泄他们的沮丧。