Задать вопрос
@ShadowTrix

Валидация имени пользователя на специальные символы?

Вот как сейчас выглядит валидация:
$whitelist = '/^([A-Za-z_0-9]+)$/i';

if (!preg_match($whitelist, $username)) {
	return false;
}


Т.е. только латинские символы, цифры и нижнее подчеркивание допустимы для username.

Но столкнулся с тем, что пропускается такое:
Username™

Как предотвратить подобное?
  • Вопрос задан
  • 381 просмотр
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 3
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Попробуйте так:
^[A-Za-z_0-9]+$
Информация про символ
Ответ написан
@ShadowTrix Автор вопроса
В общем с такой регуляркой /^([A-Za-z_0-9]+)$/i валидация работает.
Возможно, пользователь использует какую-ту иную хитрую схему подстановки спец. символов.
Будем смотреть.

А вот с такой регуляркой уже не работает:

$whitelist = '/[\p{L}\p{M}\p{Nd}._-]+/';
if (!preg_match_all($whitelist, $username)) {
	return false;
}


Первый пример - это наш кастом.
А второй - от вендора.
Ответ написан
Комментировать
@BorisKorobkov Куратор тега PHP
Web developer
Но столкнулся с тем, что пропускается такое:
Username™

Нет, не пропускает.
https://onlinephp.io/c/75a3f

P.S. Если "i", то "A-Z" лишнее. И круглые скобки в данном случае - тоже.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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