Existe-t-il un moyen d'autoriser le caractère spécial dans le nom d'utilisateur comme "#" et "~"?
9
Vous devez remplacer le defualt user_validate_name ($ name) :
Verify the syntax of the given name.
Pour ce faire, définissez votre code de validation de nom d'utilisateur dans votre module personnalisé
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
Et dans la fonction registration_username_validate, faites votre logique pour autoriser vos caractères spéciaux.
Faites attention aux problèmes de sécurité causés par l'autorisation de caractères spéciaux dans le nom d'utilisateur et aux problèmes d'affichage qui ne sont pas nettoyés des noms d'utilisateur peuvent provoquer dans les thèmes.
$form['#validate'] = array();
encombrera tous les gestionnaires de validation existants, y compris potentiellement ceux définis par d'autres modules contrib / custom. Mieux vaut désactiver de manière sélective la fonction de validation remplacée.user_account_form_validate
fonction par défaut qui valide plus que le nom d'utilisateur. Remplacer cela pourrait permettre des noms d'utilisateur en double! J'ai ajouté une réponse qui contourne ces problèmes.Malheureusement, il n'y a aucun moyen simple de le faire. Par défaut
user_register_form
etuser_profile_form
ontuser_account_form_validate
défini leur premier validateur dans$form['#validate']
.user_account_form_validate()
vérifie et nettoie le nom, l'adresse e-mail et la signature d'un compte. Dans le cadre de la vérification du nom, il appelleuser_validate_name()
. C'est la fonction que nous voulons remplacer, nonuser_account_form_validate
.On pourrait espérer un crochet utile pour le remplacer, mais hélas. Si je me fichais de validation du courrier électronique et la signature ainsi que la vérification pour voir si le nom est un double, je pouvais retirer
user_account_form_validate
de$form['#validate']
. Mais ce n'est pas bon. Au lieu de cela, j'ajoute un validateur supplémentaire qui annule le travailuser_validate_name()
et refait tout sans la vérification des caractères spéciaux.Il y a toujours une vérification des caractères spéciaux, mais elle ne vérifie que les caractères invisibles ou à usage spécial.
la source