Есть ли способ разрешить использование специального символа в имени пользователя, например "#" и "~"?
9
Вы должны переопределить defualt user_validate_name ($ name) :
Verify the syntax of the given name.
Для этого определите свой код проверки имени пользователя в своем пользовательском модуле.
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
А внутри функции registration_username_validate сделайте свою логику, чтобы разрешить использование специальных символов.
Забота о проблемах безопасности, вызванных разрешением специальных символов в имени пользователя, а также о проблемах отображения, которые могут вызывать не очищенные имена пользователей в темах.
$form['#validate'] = array();
что все существующие обработчики проверки будут затираться, в том числе и те, которые установлены другими модулями contrib / custom. Лучше выборочно сбросить переопределенную функцию проверки.user_account_form_validate
функцию по умолчанию, которая проверяет не только имя пользователя. Замена этого может позволить дубликаты имен пользователей! Я добавил ответ, который обходит эти проблемы.К сожалению, нет прямого способа сделать это. По умолчанию
user_register_form
иuser_profile_form
ужеuser_account_form_validate
установлен в качестве первого валидатора в$form['#validate']
.user_account_form_validate()
проверяет и очищает имя, адрес электронной почты и подпись учетной записи. В рамках проверки имени он звонитuser_validate_name()
. Это функция, которую мы хотим переопределить, а неuser_account_form_validate
.Можно было бы надеяться на полезный крюк, чтобы переопределить его, но увы. Если бы мне не нужно проверять электронную почту и подпись, а также проверять, является ли имя дубликатом, я мог бы просто удалить
user_account_form_validate
из$form['#validate']
. Но это не хорошо. Вместо этого я добавляю дополнительный валидатор, который отменяет работуuser_validate_name()
и восстанавливает все без проверки специальных символов.Есть еще проверка специальных символов, однако она проверяет только невидимые символы или символы специального использования.
источник