正则表达式匹配美元金额

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

$ 1234

$ 31234.3

$ 1234.56

$ 123456.78

$ .99

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

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

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

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

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

模式将是:

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

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

解释:

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

\$匹配$字符,反斜杠()的使用被称为转义,用于允许您匹配保留字符(这意味着在正则表达式的上下文中),在这种情况下$表示匹配结束字符串,即此后没有字符

\d将匹配任何十进制字符,即0-9

{n,m}将匹配前一个元素的n到m个实例,如果n为0,那么它实际上意味着匹配是可选的。

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

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

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

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

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