我正在使用以下正则表达式:
^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?\$
我使用这个正则表达式来检查有效价格:它捕获/拒绝诸如
xxx
,或llddd
,或34.23dsds
之类的东西
并允许诸如 100
或 120.00
之类的事情
它的问题似乎是,如果它是空白(空),它就会被视为有效,但它不应该。
您的问题之一是您在正则表达式中使用了代表“任何字符”的点。如果你指的是一个点,你需要像这样转义它
\.
此外,您应该至少有一个数字,因此将星号
*
替换为 +
表示“一个或多个”。
然后你可以有 .,.,.,.,.,.,- 如果你不删除第一部分中的逗号和点:
^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$
采用 yoiur 正则表达式并解决“不匹配空白”问题:
^[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}))?)?$