2013-08-28 41 views
3

我认为这只发生在我写正则表达式时。我有一个简单的正则表达式来验证一组分页号码,以后将提交给数据库,像5102550100250例如:Preg_match从一些数字中删除最后的零

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

当我进行测试,我的正则表达式以上削减0仅限数字50,100和但不是从10 !!?

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

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

+0

非常感谢您的正确答案,但最重要的是要有详细的解释和帮助学习!深深的尊重你们两个! –

回答

10

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

你可以尝试添加锚点:

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

这迫使正则表达式的整个字符串匹配,因此,返回你正在寻找正确的匹配。

+4

它的作品,杰瑞!你是对的!简直不敢相信!你正在成为我的个人正则表达大师!非常感谢! –

+1

@IliaRostovtsev这个名字的'杰里'xD谢谢你,但我认为我还有很长的路要走,成为一个正则表达大师^^ – Jerry

+1

我修好了,对不起,杰里! –

7

从左到右尝试替代方案,因此匹配5优先于50。但没有110中切断0。你可以简单地重新排序:

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

或者,选择添加0到相关替代品(既然?是贪婪的,在0将如果存在匹配):

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

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

如果这不是用于匹配,而是用于验证(即检查整个字符串),然后用杰里的s uggestion和使用锚,以确保周围有你的电话号码不希望的字符:

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

(当然里面(?:...)你也可以使用任我上面的图案,但现在因为不完整的比赛是不允许的优先级是无关紧要的。 )

+1

它的工作原理!你是对的!我不知道优先发生在这里! –

相关问题