2012-06-12 2 views

ответ

10

Вы очень близко на самом деле:

if(preg_match('/^user[0-9]{1,8}$/', $string)){ 

Анкер для «должен совпадать в начале строки» все должно быть так, как в передней, а затем «пользователь» буквальное; то вы указываете набор символов [0-9] и множитель {1,8}. Наконец, вы завершаете привязку «must match at end of string».

Несколько комментариев по исходному выражению:

  1. ^ соответствует началу строки, поэтому писать его в другом месте внутри этого выражения, но начало не даст ожидаемых результатов
  2. + является умножитель; {1,8} - тоже один, но только один множитель может использоваться после выражения
  3. Если вы не собираетесь использовать числа, найденные вами в выражении, вам не нужны скобки.

Btw, вместо [0-9] Вы также можете использовать \d. Это автоматический групповой характер, что укорачивает регулярное выражение, хотя это особенно один не сохраняет все слишком много символов ;-)

2

Вы были близки, вот ваше регулярное выражение: /^user[0-9]{1,8}$/

1

попробуйте следующее регулярное выражение вместо:

/^user([0-9]{1,8})$/

1

Используйте это регулярное выражение:

/^user\d{1,8}$/ 
3

используя ^ и $, вы соответствуете только тогда, когда шаблон является единственной вещью на линии. Это то, что вы хотите? Если да, то используйте следующее:

preg_match('/^user[0-9]{1,8}[^0-9]$/' , $string); 

Если вы хотите, чтобы найти этот шаблон в любом месте строки, я хотел бы попробовать:

preg_match('/user[0-9]{1,8}[^0-9]/' , $string); 

Как всегда, вы должны использовать эталонный инструмент, как RegexPal сделать ваше тестирование регулярных выражений изолировано.

Смежные вопросы