2012-04-07 4 views
2

Я хочу использовать preg_match для соответствия номерам 1 - 21. Как это сделать с помощью preg_match? Если число больше 21, я не хочу ничего сопоставлять.PHP preg_match range

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

Я не думаю, что вам нужно ограничивать действительные решения только для регулярного выражения, другие подходы (например, захват '[0-9] {1,2}' в regexp и проверка после этого) могут быть проще. http://blogs.msdn.com/b/oldnewthing/archive/2006/05/22/603788.aspx – DCoder

+0

@DCoder: Это должен быть ответ. –

+0

Правда. Я думал, что гораздо проще использовать регулярное выражение. – James

ответ

2

Скопировано из comment above:

Я предлагаю соответствие просто ([0-9]{1,2}) (возможно, завернутые в \b основе на входном формате) и фильтрации числового значения позже, в PHP-коде.

См. Также Raymond Chen's thoughts on the subject.

+0

Спасибо. Я использовал '\ d +' для сопоставления числа в массив, затем я подтвердил, что это было между 1 - 21. – James

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

+0

какой? и для чего? должен ли я сделать это жадным? – hakre

+0

Да. Я хочу сделать это жадным. – James