RegEx reg_match имя пользователя соответствует

0

Я пытался сделать reg_match для пользователя к принимать только az, AZ, 0-9, -, и _, к сожалению, все мои попытки не увенчались успехом.

function usernameValidation($username){
    $re =  "/[\w_-]/g";
    return preg_match($re, $username);
}
$username = "skjdasASD345-_adadasda";
if(usernameValidation($username)){
    echo "success!!";
}else{
    echo "Fail!"; //it always return fail.
}

мой код всегда возвращает неудачу, может ли кто-нибудь сказать мне, что я делаю неправильно?

  • 0
    @mario Реальная проблема здесь заключается в причуде в конкретной платформе OP. Этот вопрос слишком общий.
  • 1
    @p.s.w.gУ нас есть сотни дубликатов на этом . Я не вижу новизны или исследования здесь.
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Проблема в том, что модификатор g не работает с preg_match; для чего предназначен preg_match_all. Если вы включили отчет об ошибках (см. Как получить полезные сообщения об ошибках в PHP?), Вы должны были увидеть предупреждение об этом в соответствии с:

Предупреждение: preg_match() [function.preg-match]: Неизвестный модификатор 'g' в строке #

Однако, если вы исправите это, все еще проблема в том, что ваш шаблон будет соответствовать любой строке, которая содержит символ слова или дефис где угодно. Не имеет значения, есть ли другие недопустимые символы.

Попробуйте использовать этот шаблон

$re = '/^[\w-]+$/';

Это будет соответствовать началу строки, за которой следует один или несколько символов слова или дефисы, за которыми следует конец строки.

Также обратите внимание, что поведение \w изменяется по языку, что означает, что допустимы имена пользователей, зависит от конфигурации сервера. Если вы действительно хотите только соответствовать az или 0-9, независимо от языка, вы должны явно указать эти символы:

$re = '/^[a-z0-9_-]+$/i';

Флаг i здесь делает шаблон нечувствительным к регистру, что означает, что он также будет содержать символы верхнего регистра.

  • 0
    Потрясающие!! благодарю вас!! это работает отлично :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню