我想改进正则表达式以验证以下函数中的付款金额,以允许最多一个前导零,但仅当它还包含两个小数位,并且不是0.00(从而调用parseFloat时)
function isValidPaymentAmount(paymentAmt) {
return /^\d+(\.\d{2})?$/.test(paymentAmt) && parseFloat(paymentAmt) > 0;
}
答案 0 :(得分:1)
要匹配正的非零金额,您需要扩展您的选项,使其在前导零之后不允许任何两位数字,如下所示:
^((0?\.((0[1-9])|[1-9]\d))|([1-9]\d*(\.\d{2})?))$
答案 1 :(得分:0)
尝试写出来:
/^((0\.\d\d)|([1-9]\d*(\.\d\d)?))$/
但是如何省略0.00
?你可以单独检查一下。如果你真的想用regexp来做,那么那部分可以写成,而不是\d\d
,作为
[1-9]\d|\d[1-9]
所以
/^((0\.([1-9]\d|\d[1-9]))|[1-9]\d*(\.\d\d)?)$/
答案 2 :(得分:0)
您可以将其处理为:
^(0?[1-9]\d*\.\d\d|[1-9]\d*)$
交替的第一部分处理前导零和小数,前导零是可选的,交替的第二部分处理整数。如果要允许零作为输入,则可以添加第二个替换:
^(0?[1-9]\d*\.\d\d|[1-9]\d*|0)$
答案 3 :(得分:-1)
/^((0?\.((0[1-9])|\d{2}))|([1-9]\d*(\.\d{2})?))$/