1

我正在使用以下正则表达式:

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

我使用这个正则表达式来检查有效的价格——所以它捕获/拒绝像xxx, or lldddor之类的东西,34.23dsds 并允许像100or之类的东西120.00 它的问题似乎是如果它是空白(空)它通过它不应该是有效的 -任何想法如何改变这个?

谢谢

4

2 回答 2

1

使用您的正则表达式并解决“不匹配空白”问题:

^[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}))?)?$
于 2016-06-27T15:48:53.513 回答
1

您的问题之一是您在正则表达式中使用了代表“任何字符”的点。如果你的意思是一个点,你需要像这样逃避它\.

此外,您应该至少有一个数字,因此将星号交换*+“一个或多个”。

然后你可以有 .,.,.,.,.,.,- 如果你不从第一部分删除逗号和点:

^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$
于 2016-06-27T15:52:24.857 回答