Czy jest jakiś sposób, aby zezwolić na znak specjalny w nazwie użytkownika, taki jak „#” i „~”?
9
Musisz zastąpić błędną nazwę_użytkownika_użytkownika ($ name) :
Verify the syntax of the given name.
W tym celu zdefiniuj kod sprawdzania nazwy użytkownika w module niestandardowym
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
A wewnątrz funkcji register_username_validate wykonaj logikę, aby zezwolić na znaki specjalne.
Dbaj o problemy związane z bezpieczeństwem spowodowane przez zezwolenie na specjalne znaki w nazwie użytkownika oraz o problemy z wyświetlaniem, które nie czyszczone nazwy użytkownika mogą powodować w motywach.
$form['#validate'] = array();
spowoduje zamknięcie wszystkich istniejących procedur sprawdzania poprawności, w tym potencjalnie ustawionych przez inne moduły contrib / custom. Lepiej selektywnie rozbroić zastąpioną funkcję sprawdzania poprawności.user_account_form_validate
funkcję, która sprawdza więcej niż tylko nazwę użytkownika. Zastąpienie tego może pozwolić na zduplikowanie nazw użytkowników! Dodałem odpowiedź dotyczącą tych problemów.Niestety nie ma bezpośredniego sposobu, aby to zrobić. Domyślnie
user_register_form
iuser_profile_form
nieuser_account_form_validate
stawiają sobie za pierwszym walidator w$form['#validate']
.user_account_form_validate()
sprawdza i czyści nazwę, adres e-mail i podpis konta. W ramach sprawdzania nazwy wykonuje połączenieuser_validate_name()
. Jest to funkcja, którą chcemy zastąpićuser_account_form_validate
.Można by się spodziewać, że haczyk się obejdzie, ale niestety. Gdybym nie dbał o sprawdzenie poprawności e-maila i podpisu, a także sprawdzenie, czy nazwa jest duplikatem, mógłbym po prostu usunąć
user_account_form_validate
z niego$form['#validate']
. Ale to nie jest dobre. Zamiast tego dodaję dodatkowy walidator, który cofa pracęuser_validate_name()
i wszystko przerywa bez specjalnego sprawdzania postaci.Nadal jest sprawdzanie znaków specjalnych, ale sprawdza tylko znaki niewidoczne lub specjalne.
źródło