正则表达式以匹配逗号格式的数字和小数

时间:2009-01-07 19:38:46

标签: regex

我有这个正则表达式:

^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$

但是当我有这样的金额时,它会失败:41022095.6

我错过了什么?

4 个答案:

答案 0 :(得分:3)

您的正则表达式要么没有小数点,要么小数点后跟两个十进制数字。这取决于你想要什么,但是你可以通过这样做来使你的正则表达式符合建议的输入:

^\$?(\d{1,3}(\,\d{3})*|(\d+))(\.\d{1,2})?$

我将结尾附近的{2}更改为{1,2},以允许小数点后的一位或两位小数。我还将.更改为\.,因为正则表达式中的普通.表示“匹配任何字符”。

答案 1 :(得分:1)

点不是指“any character”,除非它在括号中?

答案 2 :(得分:0)

这一部分:"(.\d{2})?"表示您的号码可以选择以“点后跟两位数”结尾,但它是可选的。由于您的示例中没有“dot后跟两位数字”而没有任何其他允许点的内容,因此不匹配。

此外,屁股duffymo指出,你可能想要逃离点,使其匹配句号,而不是任何角色。

答案 3 :(得分:0)

尝试将最后一位更改为(。\ d {1,2})?否则最后将需要2位数字。

此外,您可能想要转义'。'