preg_match () и имя пользователя - PullRequest
8 голосов
/ 01 августа 2010
function isUserID($username) {
  if (preg_match('/^[a-z\d_]{2,20}$/i', $username)) {
    return true;
  } else {
    return false;
  }
}   

Легко ..., у меня есть это, вы можете объяснить, что он проверяет? Я знаю, что он проверяет, есть ли длина имени пользователя между 2-20, что еще? Спасибо

Ответы [ 7 ]

29 голосов
/ 01 августа 2010

Поиск текста, содержащего только буквы, цифры и символы подчеркивания, длиной от 2 до 20 символов.

/^[a-z\d_]{2,20}$/i
||||  | |||     |||
||||  | |||     ||i : case insensitive
||||  | |||     |/ : end of regex
||||  | |||     $ : end of text
||||  | ||{2,20} : repeated 2 to 20 times
||||  | |] : end character group
||||  | _ : underscore
||||  \d : any digit
|||a-z: 'a' through 'z'
||[ : start character group
|^ : beginning of text
/ : regex start
2 голосов
/ 01 августа 2010
/^[a-z\d_]{2,20}$/i

Объединяя это:

/ - разделитель регулярных выражений;Вы можете выбрать все, что захотите, но косая черта является наиболее распространенной.

^ означает «соответствовать началу ввода»: следующее выражение должно быть в начале, чтобы регулярное выражение совпадало.

[a-z\d_] - класс символов;это означает «любой из символов в квадратных скобках»;обратная косая черта в сочетании с d является сокращением для «цифр», а тире обозначает включающий диапазон;таким образом, класс символов говорит «любая буква или цифра, или подчеркивание».

{2;20} - это квантификатор, который говорит, что предыдущее выражение (класс символов) должно повторяться от 2 до 20 раз.

$ означает «сопоставить конец ввода», аналогично ^.

Другой / завершает само регулярное выражение;ниже приводятся варианты обработки, в данном случае i, что означает «без учета регистра».

1 голос
/ 01 августа 2010

Он проверяет, что имя пользователя состоит из 2–20 символов, которые представляют собой буквы (заглавные или строчные, благодаря флажку i), цифры или подчеркивание.

Сокращение может осуществляться двумя способами.: во-первых, конструкция if не нужна.Во-вторых, вы можете использовать \w вместо тех же символов, поэтому:

function isUserID($username) {
  return preg_match('/^\w{2,20}$/', $username);
}
0 голосов
/ 07 сентября 2018

Пожалуйста, замените ваш код подтверждения имени пользователя.

  if (preg_match('^[0-9A-Za-z_]+$^', $_POST['username']) == 0) {
        die ('Invalid username!');
    }
0 голосов
/ 01 августа 2010

Проверяется буквенно-цифровое слово без учета регистра длиной 2-20 символов, состоящее из букв, цифр и _

0 голосов
/ 01 августа 2010

Буквально проверяет, состоит ли $username из последовательности от 2 до 20 символов a - z, A - Z (из-за флага i для нечувствительности к регистру ) 0 - 9 (для \d) и _.

0 голосов
/ 01 августа 2010

Он также проверяет, содержит ли он какие-либо символы, кроме алфавита, az и AZ, цифры 0-9 и _.

Или вы можете сказать, проверяя, что он содержит только буквенно-цифровые символы и _.

Это также можно переписать, чтобы упростить - preg_match возвращает int, поэтому нет причин использовать шаблон «возвращать ложь, возвращать истину».

function isUserID($username){ return (bool)preg_match('/^[a-z\d_]{2,20}$/i', $username); }

Сделал бы то же самое.

Кроме того, \w означает то же самое, что и эти символы.Буквы, цифры и подчеркивание.Так что еще лучше было бы

function isUserID($username){ return (bool)preg_match('/^[\w]{2,20}$/i', $username); }
...