改进用于验证支付金额的正则表达式
Improving a regular expression for validating payment amount
我想改进以下函数中用于验证付款金额的正则表达式,以允许最多有一个前导零,但前提是它还包含两位小数,并且不是 0.00(从而调用 parseFloat没有实际意义)
function isValidPaymentAmount(paymentAmt) {
return /^\d+(\.\d{2})?$/.test(paymentAmt) && parseFloat(paymentAmt) > 0;
}
/^((0?\.((0[1-9])|\d{2}))|([1-9]\d*(\.\d{2})?))$/
要匹配一个正的非零金额,您需要扩展您的选项,这样它就不允许在前导零之后出现任何两位数,例如:
^((0?\.((0[1-9])|[1-9]\d))|([1-9]\d*(\.\d{2})?))$
试着把它写出来:
/^((0\.\d\d)|([1-9]\d*(\.\d\d)?))$/
但是如何省略0.00
呢?你可以做一个单独的检查。如果你真的想用正则表达式来做,那么那部分可以写成 \d\d
,而不是
[1-9]\d|\d[1-9]
所以
/^((0\.([1-9]\d|\d[1-9]))|[1-9]\d*(\.\d\d)?)$/
您可以这样处理:
^(0?[1-9]\d*\.\d\d|[1-9]\d*)$
交替的第一部分处理前导零和小数,前导零是可选的,交替的第二部分处理整数。如果你想允许零作为输入,那么你可以添加第二个交替:
^(0?[1-9]\d*\.\d\d|[1-9]\d*|0)$
我想改进以下函数中用于验证付款金额的正则表达式,以允许最多有一个前导零,但前提是它还包含两位小数,并且不是 0.00(从而调用 parseFloat没有实际意义)
function isValidPaymentAmount(paymentAmt) {
return /^\d+(\.\d{2})?$/.test(paymentAmt) && parseFloat(paymentAmt) > 0;
}
/^((0?\.((0[1-9])|\d{2}))|([1-9]\d*(\.\d{2})?))$/
要匹配一个正的非零金额,您需要扩展您的选项,这样它就不允许在前导零之后出现任何两位数,例如:
^((0?\.((0[1-9])|[1-9]\d))|([1-9]\d*(\.\d{2})?))$
试着把它写出来:
/^((0\.\d\d)|([1-9]\d*(\.\d\d)?))$/
但是如何省略0.00
呢?你可以做一个单独的检查。如果你真的想用正则表达式来做,那么那部分可以写成 \d\d
,而不是
[1-9]\d|\d[1-9]
所以
/^((0\.([1-9]\d|\d[1-9]))|[1-9]\d*(\.\d\d)?)$/
您可以这样处理:
^(0?[1-9]\d*\.\d\d|[1-9]\d*)$
交替的第一部分处理前导零和小数,前导零是可选的,交替的第二部分处理整数。如果你想允许零作为输入,那么你可以添加第二个交替:
^(0?[1-9]\d*\.\d\d|[1-9]\d*|0)$