preg_match () и имя пользователя

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

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

8
задан kiamlaluno 31 July 2010 в 21:23
поделиться

6 ответов

Ищет текст, содержащий только алфавитно-цифровые символы и символы подчеркивания, длиной от 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
30
ответ дан 5 December 2019 в 05:18
поделиться

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

0
ответ дан 5 December 2019 в 05:18
поделиться

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

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

function isUserID($username) {
  return preg_match('/^\w{2,20}$/', $username);
}
1
ответ дан 5 December 2019 в 05:18
поделиться
/^[a-z\d_]{2,20}$/i

Разделитель:

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

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

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

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

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

Еще один / завершает сам regex; далее следуют опции процессинга, в данном случае i, что означает 'нечувствительность к регистру'.

2
ответ дан 5 December 2019 в 05:18
поделиться

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

0
ответ дан 5 December 2019 в 05:18
поделиться

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

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

Это можно переписать и попроще - preg_match возвращает int, поэтому нет причин использовать шаблон 'return false, return true'.

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); }
0
ответ дан 5 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: