PHP - preg_match () - PullRequest
       24

PHP - preg_match ()

4 голосов
/ 29 марта 2012

Хорошо, я хочу, чтобы пользователь мог вводить каждый символ от A-Z и каждое число от 0 до 9, но я не хочу, чтобы он вводил «специальные символы».

Код:

if (preg_match("/^[a-zA-Z0-9]$/", $user_name)) {
    #Stuff
}

Как можно проверить все указанные символы, а затем проверить, совпадают ли они? Я пробовал preg_match_all(), но я честно не понимал этого.

Например, если пользователь ввел «FaiL65Mal», я хочу, чтобы он разрешил и продолжил. Но если они вводят «Fail {] ^ 7 (,», я хочу, чтобы он отображался с ошибкой.

Ответы [ 3 ]

9 голосов
/ 29 марта 2012

Вам просто нужен квантификатор в вашем регулярном выражении:

Ноль или более символов *:

/^[a-zA-Z0-9]*$/

Один или несколько символов +:

/^[a-zA-Z0-9]+$/

Ваше регулярное выражение как есть будет соответствовать только строке с ровно одним символом, который является буквой или цифрой.Вам нужен один из приведенных выше вариантов для нуля, нескольких или одного или нескольких, в зависимости от того, хотите ли вы разрешить или отклонить пустую строку.

1 голос
/ 29 марта 2012

Ваше регулярное выражение необходимо изменить на

/^[a-zA-Z0-9]{1,8}$/

Для имен пользователей от 1 до 8 символов.Просто настройте 8 на соответствующее число и, возможно, 1.

В настоящее время ваше выражение соответствует одному символу

0 голосов
/ 29 ноября 2017

Пожалуйста, имейте в виду, что preg_match() и другие preg_*() функции ненадежны, потому что они возвращают либо 0, либо false при сбое, поэтому просто if не выдает ошибку

Рассмотрите возможность использования T-Regx :

if (pattern(('^[a-zA-Z0-9]{1,8}$')->matches($input)) 
{
    // Matches! :)
}
...