Ищем определенный фильтр PHP - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь подтвердить имя пользователя.Я хочу, чтобы он мог иметь буквы и цифры, не более 30 символов.

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

Ответы [ 4 ]

2 голосов
/ 10 января 2012

Нет встроенных фильтров.

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

$valid = (strlen($username) <= 30 && preg_match("#^[a-z0-9A-Z]+$#", $username));
0 голосов
/ 10 января 2012

Нет ничего встроенного в PHP, чтобы удовлетворить эти требования. Вот вам регулярное выражение:

$valid = (bool)preg_match('/^[a-zA-Z0-9]{1,30}$/', $username);

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

0 голосов
/ 10 января 2012

Вот функция, которая должна это делать. Я рекомендую потратить некоторое время на изучение работы регулярных выражений. Они являются одним из самых мощных (и полезных) инструментов в наборе инструментов для программистов.

Обновление: Использование предложения разделителя из комментария выше и немного упрощение моей функции:

Обновление 2: Добавлен модификатор шаблона / D, чтобы гарантировать, что $ предотвращает совпадение с \ n.

function isValidUsername($name)
{
  return preg_match("/^[a-zA-Z0-9]{1,30}$/D", $name);
}
0 голосов
/ 10 января 2012

Нет никаких фильтров для чего-то такого специфического, однако это работает и имеет простое регулярное выражение:

function isValidUsername($username) {
    return (strlen($username) <= 30) && (preg_match("/^[a-z0-9]+$/i", $username) == 1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...