Как использовать `preg_match ()` для сопоставления имени пользователя - PullRequest
3 голосов
/ 02 апреля 2012

Я пытаюсь проверить имена пользователей в PHP, используя preg_match(), но я не могу заставить его работать так, как я хочу.preg_match()

  1. мне требуется принимать только буквы или цифры в начале и конце строки* должен иметь длину от 5 до 20 символов

preg_match('/^[a-zA-Z0-9]+[.-_]*[a-zA-Z0-9]{5,20}$/', $username)

Ответы [ 3 ]

6 голосов
/ 02 апреля 2012

Разбейте требования на более мелкие части, и вы увидите, что это становится намного проще:

  • Первый символ должен быть 1 буквой или цифрой
  • Средние символы должны быть точкой, подчеркиванием тире, буквой или цифрой
  • Последний символ должен быть буквой или цифрой
  • Поскольку первый и последний сегменты должны быть 1 символом, середина должна быть от 3 до 18
~^[a-z0-9]{1}[a-z0-9._-]{3,18}[a-z0-9]{1}$~i
2 голосов
/ 02 апреля 2012
if (preg_match('~^[0-9a-z][-_.0-9a-z]{3,18}[0-9a-z]$~i', $username) > 0)
{
    // valid
}
2 голосов
/ 02 апреля 2012

Если регулярное выражение вводит вас в заблуждение, вы всегда можете сопоставить символы с регулярным выражением, а затем явно проверить длину строки с помощью strlen().

$valid = preg_match('/^[a-zA-Z\d]+[\w.-]*[a-zA-Z\d]$/', $username)
         AND strlen($username) >= 5 AND strlen($username) <= 20;
...