PHP正则表达不太合适

时间:2016-06-27 15:44:52

标签: php regex price

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

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

我使用此正则表达式检查有效价格 - 因此它会捕获/拒绝xxxllddd34.23dsds等内容 并允许100120.00之类的内容 它的问题似乎是它是空白的(空的)它传递的有效它不应该 - 任何想法如何改变这个?

由于

2 个答案:

答案 0 :(得分:1)

采取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}))?)?$

答案 1 :(得分:1)

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

那样逃避它

此外,您应该至少有一个号码,因此请将*的星号+换成“一个或多个”。

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

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