Gibt es eine Möglichkeit, das Sonderzeichen im Benutzernamen wie "#" und "~" zuzulassen?
9
Sie müssen den defualt user_validate_name ($ name) überschreiben :
Verify the syntax of the given name.
Definieren Sie dazu Ihren Validierungscode für den Benutzernamen in Ihrem benutzerdefinierten Modul
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
Und innerhalb der Funktion register_username_validate führen Sie Ihre Logik aus, um Ihre Sonderzeichen zuzulassen.
Bedenken Sie Sicherheitsprobleme, die durch das Zulassen von Sonderzeichen im Benutzernamen verursacht werden, und Probleme mit der Anzeige, die nicht bereinigte Benutzernamen in Themen verursachen können.
$form['#validate'] = array();
dass alle vorhandenen Validierungshandler überlastet werden, einschließlich der möglicherweise von anderen Contrib / Custom-Modulen festgelegten. Besser, die überschriebene Validierungsfunktion selektiv zu deaktivieren.user_account_form_validate
, die mehr als nur den Benutzernamen validiert. Das Ersetzen könnte doppelte Benutzernamen ermöglichen! Ich habe eine Antwort hinzugefügt , die diese Probleme umgeht.Leider gibt es dafür keinen direkten Weg. In der Standardeinstellung
user_register_form
unduser_profile_form
hatuser_account_form_validate
als ersten Validator gesetzt in$form['#validate']
.user_account_form_validate()
Überprüft und bereinigt den Namen, die E-Mail-Adresse und die Unterschrift eines Kontos. Im Rahmen der Überprüfung des Namens wird ein Anruf getätigtuser_validate_name()
. Dies ist die Funktion, die wir überschreiben möchten, nichtuser_account_form_validate
.Man würde auf einen hilfreichen Haken hoffen, um ihn zu überschreiben, aber leider. Wenn ich nicht über die Validierung der E - Mail und Unterschrift sowie die Überprüfung, scherte , wenn der Name ein Duplikat ist, konnte ich einfach entfernen
user_account_form_validate
aus$form['#validate']
. Aber das ist nicht gut. Stattdessen füge ich einen zusätzlichen Validator hinzu, der die Arbeit von rückgängig machtuser_validate_name()
und alles ohne die Sonderzeichenprüfung wiederholt.Es gibt immer noch eine Sonderzeichenprüfung, jedoch nur nach unsichtbaren Zeichen oder Sonderzeichen.
quelle