我正在使用以下正则表达式:
^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?\$
我使用这个正则表达式来检查有效的价格——所以它捕获/拒绝像xxx
, or llddd
or之类的东西,34.23dsds
并允许像100
or之类的东西120.00
它的问题似乎是如果它是空白(空)它通过它不应该是有效的 -任何想法如何改变这个?
谢谢
使用您的正则表达式并解决“不匹配空白”问题:
^[0-9.,]+(([.,][-])|([.,][0-9]{2}))?$
允许*
0 或更多,而+
允许 1 或更多,因此*
允许空白但不允许+
,而是必须至少有一位数字。
编辑:
你应该清理一下这个正则表达式
^[0-9]+(?:[.,-](?:[0-9]{2})?)?$
这样就解决了",,,"的匹配
http://www.regextester.com/?fam=95185
编辑 2:@Fuzzzzel指出这与我们假设您想要匹配的情况“50,-”不匹配,并且假定删除捕获组。这是我建议的正则表达式的最新版本:
^[0-9]+([.,-](-|([0-9]{2}))?)?$
您的问题之一是您在正则表达式中使用了代表“任何字符”的点。如果你的意思是一个点,你需要像这样逃避它\.
此外,您应该至少有一个数字,因此将星号交换*
为+
“一个或多个”。
然后你可以有 .,.,.,.,.,.,- 如果你不从第一部分删除逗号和点:
^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$