正则表达式匹配美元金额

时间:2010-07-07 09:17:09

标签: c# javascript asp.net regex

有人能为我提供以下模式的正则表达式吗?

$ 1234

$ 31234.3

$ 1234.56

$ 123456.78

$ 99

我的要求是小数点前的数字不应超过6,小数点后的数字不应超过2位数。请帮我。提前谢谢..

4 个答案:

答案 0 :(得分:9)

^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$

(?=.*\d)确保字符串中至少有一位数字。如果没有这个,正则表达式^\$\d{0,6}(\.\d{1,2})?$将匹配字符串$

不过,前瞻不需要这么久;即使是简单的(?=.)也可以,因为正则表达式确保后续字符确实有效。因此,它可以简化为

^\$(?=.)\d{0,6}(\.\d{1,2})?$

答案 1 :(得分:4)

^\$[0-9]{0,6}(\.[0-9]{1,2})?$

答案 2 :(得分:2)

模式是:

^\$\d{0,6}(\.\d{0,2})?$

这不会验证是否有任何数字,所以“$”。根据提问者的原始要求,这是一个有效的匹配和有效的结果。

解释:

^表示只匹配我正在寻找的字符串之前没有任何内容,即“USD $ 123.45”在此示例中将失败,因为$(与\$匹配)不是在字符串开头之后立即。

\$匹配$字符,反斜杠()的使用称为转义,用于匹配保留字符(在正则表达式的上下文中表示某些内容),在本例中为$ which表示匹配字符串的结尾,即此点后没有字符

\d将匹配任何小数字符,即0-9

{n,m}将匹配前一个元素的n到m个实例,如果n为0则表示匹配是可选的。

\.将匹配小数点,它被转义为。是正则表达式中的保留字符,意味着匹配任何字符

(...)将正则表达式作为一个整体包含在一起,还有其他后果,但我会留给你探索。在这种情况下,它纯粹是为了正则表达式中的下一个字符的好处

?将匹配前面元素的0或1(在这种情况下,查找小数点和最多2个十进制字符的组,所以我们期望没有带结尾字符的小数点(0发生)或小数点,最多2个十进制字符(1次出现))

$匹配字符串的结尾,此后字符串中不能包含任何字符。

答案 3 :(得分:1)

/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/