PHP 正则表达式不能正常工作

PHP Regex Not Quite Working

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

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

我使用这个正则表达式来检查有效价格——所以它 catches/rejects 诸如 xxxllddd34.23dsds 之类的东西 并允许 100120.00 之类的东西 它的问题似乎是,如果它是空白的(空的),它会被认为是有效的,但它不应该——有什么想法可以改变它吗??

谢谢

使用你的正则表达式解决 "don't match blanks" 问题:

^[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}))?)?$

您的问题之一是您在正则表达式中使用了代表 "any character" 的点。如果你的意思是一个点,你需要像这样转义它 \.

此外,您应该至少有一个数字,因此请将星号 * 换成 + 换成 "one or more"。

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

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