我试图写一个正则表达式来匹配金额。在我的情况下,我需要的是,金额应该是一个正整数或如果使用小数,它必须后跟一个或两个整数。基本上,以下是有效金额:
我写的是:/[0-9]+(\.[0-9]{1,2}){0,1}/
我的想法是通过使用这样的括号:(\.[0-9]{1,2})
,我将能够捆绑整个"十进制加上一个或两个整数"部分。但它并没有发生。在其他问题中,这个正则表达式允许245.
和345.567
这样的东西漏掉。 :(
请帮助!
答案 0 :(得分:3)
您的正则表达式很好,但您需要匹配字符串的开头和结尾。否则,你的正则表达式只能匹配字符串的一部分,仍然(正确)返回匹配。要匹配字符串的开头,请使用^
,最后使用$
。
更新:正如Avinash所说,您可以将{0,1}
替换为?
。 JS支持数字\d
,因此可以进一步简化正则表达式
最后,因为如果仅针对正则表达式进行测试,则可以使用非捕获组((?:...)
而不是(...)
),它提供better performance。
原:
/[0-9]+(\.[0-9]{1,2}){0,1}/.test('345.567')
固定,更快;)
/^\d+(?:\.\d{1,2})?$/.test('345.567')