3

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

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

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

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

我在这里做错了什么?这次我真的错过了什么?

4

2 回答 2

10

这是因为在 string50中,正则表达式首先匹配5,这是有效的。在 string250中,正则表达式首先匹配25,这是有效的并在此处结束。

您可以尝试添加锚点:

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

这会强制正则表达式匹配整个字符串,因此返回您正在寻找的正确匹配。

于 2013-08-28T19:56:33.570 回答
7

从左到右尝试替代方案,因此匹配5优先于50. 但是没有1办法切断0from 10。您可以简单地重新排序它们:

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

或者,将0可选添加到相关的替代品中(并且由于?是贪婪的,0如果存在的话将被匹配):

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

或者

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

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

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

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

于 2013-08-28T19:56:25.117 回答