Регулярные выражения соответствуют сложным условиям для имени пользователя - PullRequest
2 голосов
/ 08 ноября 2011

Мне нужно проверить, есть ли в строке что-то еще, чем указано ниже

  • она должна начинаться с буквы (в верхнем или нижнем регистре)
  • может иметь буквенные символы
  • может иметь числовые символы
  • может иметь тире
  • может иметь знак минус -
  • может иметь подчеркивание _
  • может иметь запятую,
  • может иметь точки.
  • длина от 4 до 35 символов, не более не менее

все остальное не должно быть в этой строке иметь

я застрялна это:

preg_match('/^[\w]{4,35}$/i', $username)

Ответы [ 2 ]

7 голосов
/ 08 ноября 2011
if( !preg_match('/^[a-zA-Z][a-zA-Z0-9_,.-]*$/', $username ))
    echo "failed\n";
2 голосов
/ 08 ноября 2011
preg_match('/^[\w]{4,35}$/i', $username)

ОК, давайте посмотрим, что это не работает:

Соответствует началу строки, за которым следует [a-zA-Z0-9_] не менее 4 раз, максимум 35 раз Это сильно отличается от ваших требований.

Вместо того, что вы должны использовать:

/^[a-zA-Z][-,.\w]{3,34}$/

Модификатор чувствительности к регистру i не нужен. Также я не думаю, что это именно то, что вы хотите. Обычно вам нужно указать минимальную длину, которую вы не делаете. Это может соответствовать "а", например ( не хорошее имя пользователя )

...