2012-04-07 134 views
2

我想使用preg_match来匹配数字1 - 21.我怎样才能使用preg_match做到这一点?如果数字大于21,我不想匹配任何东西。PHP preg_match范围

example preg_match('([0-9][0-1]{0,2})', 'Johnathan 21'); 
+4

我不认为你需要限制正则表达式的有效解决方案,其他方法(例如捕获正则表达式中的[[0-9] {1,2}'并且之后验证)可能更容易。 http://blogs.msdn.com/b/oldnewthing/archive/2006/05/22/603788.aspx – DCoder 2012-04-07 17:10:29

+0

@二极管:这应该是一个答案。 – 2012-04-07 17:17:24

+0

是的。我认为我会更简单地使用正则表达式。 – James 2012-04-07 17:21:26

回答

2

comment above复制:

我建议匹配只是([0-9]{1,2})(也许裹着\b,基于输入格式)并过滤数值后来,在PHP代码中。请参阅Raymond Chen's thoughts on the subject

+0

谢谢。我用'\ d +'将数字匹配到数组中,然后我验证它是在1 - 21之间。 – James 2012-04-07 17:25:24

1

从字面上看:

preg_match('~ (1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21)$~', 'Johnathan 21'); 

但也许这是更漂亮:

preg_match('~ ([1-9]|1[0-9]|2[01])$~', 'Johnathan 21'); 
+0

这个例子将匹配每个数字。 – James 2012-04-07 17:05:00

+0

哪一个?为了什么?我应该让它变得贪婪吗? – hakre 2012-04-07 17:05:55

+0

是的。我想使这个贪婪。 – James 2012-04-07 17:08:02