Preg_match从一些数字中去掉最后一个零


Preg_match cuts last zeros from some numbers

我认为只有在编写正则表达式时才会发生这种情况。我有一个简单的正则表达式来验证一组页码,这些页码稍后将提交到数据库,如5102550100250示例:

/all|5|10|25|50|100|250/

当我执行测试时,上面的正则表达式仅从数字50、100250中剪切0,而不是从10中剪切!!?

在线示例:
http://viper-7.com/IbKFKw

我在这里做错了什么?这次我到底错过了什么?

这是因为在字符串50中,正则表达式首先匹配有效的5。在字符串250中,正则表达式首先匹配有效的25,并在此处结束。

你可以尝试添加锚点:

/^(?:all|5|10|25|50|100|250)$/

这将强制正则表达式匹配整个字符串,从而返回您要查找的正确匹配项。

备选方案从左到右进行尝试,因此匹配的5优先于50。但没有CCD_ 15将CCD_。你可以简单地重新排序:

/all|250|100|50|25|10|5/

或者,可选地将0添加到相关备选方案中(并且由于?是贪婪的,因此如果存在0,则将匹配CCD_20):

/all|50?|100?|250?/

/all|(?:5|10|25)0?/

如果这不是为了匹配,而是为了验证(即检查整个字符串),那么按照Jerry的建议,并使用锚点来确保你的号码周围没有不需要的字符:

/^(?:all|5|10|25|50|100|250)$/

(当然,在(?:...)中,您也可以使用我上面的任何模式,但现在优先级无关紧要,因为不允许不完全匹配。)