Title: filter sanitize_user
Last modified: 07.12.2021

---

# filter sanitize_user

 *  Решено [ws256](https://ru.wordpress.org/support/users/ws256/)
 * (@ws256)
 * [4 года, 10 месяцев назад](https://ru.wordpress.org/support/topic/filter-sanitize_user/)
 * Здравствуйте!
 * У меня на сайте зарегистрировано много пользователей, бывают дублирующие логины,
   или логины содержащие спецсимволы, как только люди не ухищряются, в итоге это
   стало влиять на URL адреса профилей и другой функционал.
 * Пример, это все один и тот же профиль пользователя:
 *     ```
       /author/admin-1
       /author/admin
       /author/admin.
       /author/admin-
       /author/admin@
       /author/-admin@
       /author/-admin
       ```
   
 * или admin-ivanov = admin.ivanov
 * Было решено ввести ограничения на символы при регистрации через фильтр sanitize_user.
   Я хотел запретить использовать в начале и конце логина тире, нижнее подчеркивание,
   точку. В середине можно использовать, например разделение имя-фамилия. Правильнее
   сказать не запретить а автоматически удалять эти символы.
 * $username = trim( $username, ‘-‘ );
 * Есть плагин Plugin Name: Allow Cyrillic Usernames
    Author: Sergey Biryukov я 
   по аналогии модифицировал фильтр, но теперь я получаю сообщение об ошибке при
   попытке зарегистрироваться, что то вроде ОШИБКА: Это имя пользователя некорректно,
   поскольку оно содержит недопустимые символы. Пожалуйста, введите корректное имя
   пользователя.
 * Как сделать чтобы мы принудительно изменяли логин а не просили пользователя так
   не делать?

Просмотр 3 ответов — с 1 по 3 (всего 3)

 *  Модератор [Sergey Biryukov](https://ru.wordpress.org/support/users/sergeybiryukov/)
 * (@sergeybiryukov)
 * Live and Learn
 * [4 года, 10 месяцев назад](https://ru.wordpress.org/support/topic/filter-sanitize_user/#post-12217934)
 * Фильтр `sanitize_user` нужно дополнить фильтром `validate_username`, примерно
   так:
 *     ```
       function my_sanitize_user( $username, $raw_username, $strict ) {
       	$username = wp_strip_all_tags( $raw_username );
       	$username = remove_accents( $username );
       	// Kill octets.
       	$username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username );
       	// Kill entities.
       	$username = preg_replace( '/&.+?;/', '', $username );
   
       	// If strict, reduce to ASCII characters for max portability.
       	if ( $strict )
       		$username = preg_replace( '|[^a-z0-9 _.\-@]|iu', '', $username );
   
       	$username = trim( $username );
       	// Consolidate contiguous whitespace.
       	$username = preg_replace( '|\s+|', ' ', $username );
   
       	// Remove some leading and trailing characters.
       	$username = ltrim( $username, '-_.' );
       	$username = trim( $username, '-_.' );
   
       	return $username;
       }
       add_filter( 'sanitize_user', 'my_sanitize_user', 10, 3 );
   
       function my_validate_username( $valid, $username ) {
       	$sanitized = sanitize_user( $username, true );
   
       	$edited_username = ltrim( $username, '-_.' );
       	$edited_username = trim( $edited_username, '-_.' );
   
       	$valid = ( $sanitized == $edited_username && ! empty( $sanitized ) );
   
       	return $valid;
       }
       add_filter( 'validate_username', 'my_validate_username', 10, 2 );
       ```
   
 *  Автор [ws256](https://ru.wordpress.org/support/users/ws256/)
 * (@ws256)
 * [4 года, 10 месяцев назад](https://ru.wordpress.org/support/topic/filter-sanitize_user/#post-12217955)
 * Спасибо, помогло!
 * Еще одно наблюдение про логины и страницы профилей.
    Пробел в логине — превращается
   в тире в URL. Точки и тире в URL интерпретируются одинокого ведут на одну и туже
   страницу. Возможно, это ошибка в настройках моего веб-сервера. По итогу у меня
   куча дублирующих URL и ошибки в поиске по базе. Я не смог найти корень проблемы.
   Решил так же запретить использовать пробел в качестве разделителя, автоматически
   заменять точку на тире, хоть как-то к общему виду привести.
 * Теперь `---.volk---` превращается в `volk`
 * Правила валидации логинов каждый придумывает сам, есть плагины, например Restrict
   Usernames Emails Characters
 *  Автор [ws256](https://ru.wordpress.org/support/users/ws256/)
 * (@ws256)
 * [4 года, 10 месяцев назад](https://ru.wordpress.org/support/topic/filter-sanitize_user/#post-12217963)
 * Дополню. Данные правила распространяются не только на новые регистрации, но и
   на авторизацию в целом, старые пользователи не могут войти.

Просмотр 3 ответов — с 1 по 3 (всего 3)

 Тема «filter sanitize_user» закрыта для новых ответов.

## Метки

 * [filter](https://ru.wordpress.org/support/topic-tag/filter/)
 * [login](https://ru.wordpress.org/support/topic-tag/login/)
 * [sanitize_user](https://ru.wordpress.org/support/topic-tag/sanitize_user/)
 * [users](https://ru.wordpress.org/support/topic-tag/users/)

 * Форум: [Проблемы и решения](https://ru.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 3 ответа
 * 2 участника
 * Последний ответ: [ws256](https://ru.wordpress.org/support/users/ws256/)
 * Последняя активность: [4 года, 10 месяцев назад](https://ru.wordpress.org/support/topic/filter-sanitize_user/#post-12217963)
 * Статус: решённая

## Темы

### Самые популярные темы

### Темы без ответов

### Без вопроса

### Решённые

### Нерешённые

### Все темы
