как я могу запретить специальные символы, пробелы, заглавные буквы и точки в имени пользователя при регистрации?

Вопрос или проблема

Я управляю сайтом по подписке. Любой может зарегистрироваться на моем сайте.

Я хочу запретить специальные символы (например: !@#$%^&*), пробелы, заглавные буквы, точку (.) в имени пользователя при регистрации.

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

Для запрета заглавных букв в именах пользователей:

add_filter( 'sanitize_user', 'wpse_83689_lower_case_user_name' );
function wpse_83689_lower_case_user_name( $name ) {
if ( function_exists( 'mb_strtolower' ) )
    return mb_strtolower( $name );

return strtolower( $name );

Для запрета пробелов в именах пользователей:

add_filter('validate_username' , 'custom_validate_username', 10, 2);

function custom_validate_username($valid, $username ) {
    if (preg_match("/\\s/", $username)) {
        // есть пробелы
        return $valid=false;
    }

return $valid;
}

Я много искал в Google, но не нашел решения для запрета точки и специальных символов.

Может кто-то решить мою проблему и объединить все 4 варианта в одну функцию?

Извините за мой плохой английский.

Спасибо

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

 //добавьте фильтр для недопустимости имени пользователя с пробелами, специальными символами, заглавными буквами, точками
    add_filter('validate_username','restrict_space_in_username',10,2);
    function restrict_space_in_username($valid,$user_name){
     //проверка на наличие пробелов
     if ( preg_match('/\s[!@#$%^&*()+=\-\[\]\';,.\/{}|":<>?~\\\\][A-Z](.)/',$user_name) )
     return false;//если да, то это ошибка
     return $valid;//в противном случае возвращаем актуальную валидность
    }

Используйте регулярное выражение, которое соответствует всему кроме строчных ASCII символов. Вы можете легко добавить больше допустимых символов (возможно, подчеркивания _?) или даже немного магии регулярных выражений:

add_filter('validate_username', function (bool $isValid, string $username): bool {
    if (preg_match('/[^a-z]/', $username)) {
        return false;
    }

    return $isValid;
});

Фильтр validate_user проверяется внутри register_new_user и предотвращает регистрацию пользователя, если возвращается false, показывая пользователю сообщение об ошибке.

Ответ или решение

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

Общие требования

Вы хотите:

  1. Запретить специальные символы (например: !@#$%^&*).
  2. Запретить пробелы.
  3. Запретить заглавные буквы.
  4. Запретить точки (.).

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

Пример кода

Вот пример кода, который вы можете использовать в вашем WordPress-сайте. Он объединяет все проверки в одну функцию и использует фильтр validate_username:

// Добавляем фильтр для проверки имени пользователя
add_filter('validate_username', 'custom_validate_username', 10, 2);

function custom_validate_username($valid, $username) {
    // Проверка на наличие больших букв
    if (preg_match('/[A-Z]/', $username)) {
        return false; // Если найдена заглавная буква, возвращаем false
    }

    // Проверка на наличие пробелов
    if (preg_match('/\s/', $username)) {
        return false; // Если найдены пробелы, возвращаем false
    }

    // Проверка на наличие точки
    if (preg_match('/\./', $username)) {
        return false; // Если найдена точка, возвращаем false
    }

    // Проверка на наличие специальных символов
    if (preg_match('/[^a-z]/', $username)) {
        return false; // Если найдены специальные символы, возвращаем false
    }

    // Если все проверки пройдены, возвращаем актуальность имени пользователя
    return $valid;
}

Пояснение

  • Фильтр validate_username: Этот фильтр позволяет выполнять проверку имени пользователя перед его регистрацией.
  • Функция preg_match: Мы используем эту функцию для выполнения регулярных выражений. В данном случае мы применяем несколько условий для проверки, соответствует ли имя пользователя вашим требованиям.
  • Регулярные выражения:
    • /[A-Z]/ — проверяет наличие заглавных букв.
    • /\s/ — проверяет наличие пробелов.
    • /\./ — проверяет наличие точек.
    • /[^a-z]/ — проверяет наличие символов, которые не являются строчными буквами английского алфавита.

Заключение

Данный код эффективно проверяет имя пользователя на соответствие всем вашим критериям. Убедитесь, что вы добавили его в файл functions.php вашей темы или в специальный плагин для функций. Это поможет вам избежать нежелательных регистраций на вашем сайте.

Если у вас есть дополнительные вопросы или нужна помощь с другими аспектами сайта, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...