改进正则表达式以验证付款金额

时间:2016-05-17 20:13:42

标签: javascript regex validation payment

我想改进正则表达式以验证以下函数中的付款金额,以允许最多一个前导零,但仅当它还包含两个小数位,并且不是0.00(从而调用parseFloat时)

function isValidPaymentAmount(paymentAmt) {
    return /^\d+(\.\d{2})?$/.test(paymentAmt) && parseFloat(paymentAmt) > 0;
}

4 个答案:

答案 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})?))$/

请参阅:https://regex101.com/r/gI8mN4/1