Вопрос или проблема
Я управляю сайтом по подписке. Любой может зарегистрироваться на моем сайте.
Я хочу запретить специальные символы (например: !@#$%^&*), пробелы, заглавные буквы, точку (.) в имени пользователя при регистрации.
У меня нет кода, который мог бы покрыть все мои требования (специальные символы, пробел, заглавные буквы, точка). Я использую отдельные функции, чтобы это остановить.
Для запрета заглавных букв в именах пользователей:
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
, показывая пользователю сообщение об ошибке.
Ответ или решение
Для того чтобы запретить использование специальных символов, пробелов, заглавных букв и точек в имени пользователя при регистрации на вашем сайте, вы можете объединить все необходимые проверки в одну функцию. Я помогу вам составить решение, которое будет учитывать все ваши требования.
Общие требования
Вы хотите:
- Запретить специальные символы (например:
!@#$%^&*
). - Запретить пробелы.
- Запретить заглавные буквы.
- Запретить точки (
.
).
Для реализации данных условий мы будем использовать регулярные выражения (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
вашей темы или в специальный плагин для функций. Это поможет вам избежать нежелательных регистраций на вашем сайте.
Если у вас есть дополнительные вопросы или нужна помощь с другими аспектами сайта, не стесняйтесь обращаться.