¿Hay alguna forma de permitir el carácter especial en el nombre de usuario como "#" y "~"?
9
Debe anular el defualt user_validate_name ($ name) :
Verify the syntax of the given name.
Para hacerlo, defina su código de validación de nombre de usuario en su módulo personalizado
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
Y dentro de la función Registration_username_validate, haga su lógica para permitir sus caracteres especiales.
Preocúpese por los problemas de seguridad causados al permitir caracteres especiales en el nombre de usuario y por los problemas de visualización que los nombres de usuario no desinfectados pueden causar en los temas.
$form['#validate'] = array();
que bloqueará cualquier manejador de validación existente, incluidos potencialmente aquellos establecidos por otros módulos contrib / custom. Es mejor desactivar selectivamente la función de validación anulada.user_account_form_validate
función predeterminada que valida más que solo el nombre de usuario. ¡Reemplazar esto podría permitir nombres de usuario duplicados! He agregado una respuesta que soluciona estos problemas.Desafortunadamente, no hay una forma directa de hacer esto. Por defecto
user_register_form
y seuser_profile_form
hanuser_account_form_validate
establecido como su primer validador en$form['#validate']
.user_account_form_validate()
comprueba y limpia el nombre, el correo electrónico y la firma de una cuenta. Como parte de verificar el nombre, realiza una llamadauser_validate_name()
. Esta es la función que queremos anular, nouser_account_form_validate
.Uno esperaría un gancho útil para anularlo, pero desgraciadamente. Si no me importa acerca de la validación de la firma de correo electrónico y así la comprobación para ver si el nombre es un duplicado, tan sólo pudiera extraer
user_account_form_validate
de$form['#validate']
. Pero eso no es bueno. En cambio, agrego un validador adicional que deshace el trabajouser_validate_name()
y rehace todo sin la verificación especial de caracteres.Todavía hay una verificación especial de caracteres, sin embargo, solo busca caracteres invisibles o de uso especial.
fuente