Existe alguma maneira de permitir o caractere especial no nome de usuário como "#" e "~"?
9
Você precisa substituir o nome de usuário padrão inválido (nome $) :
Verify the syntax of the given name.
Para fazer isso, defina seu código de validação de nome de usuário no seu 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';
}
}
E dentro da função registration_username_validate, faça sua lógica para permitir seus caracteres especiais.
Se preocupe com problemas de segurança causados pela permissão de caracteres especiais no nome de usuário e com problemas de exibição que não sejam nomes de usuário higienizados podem causar em temas.
$form['#validate'] = array();
que os manipuladores de validação existentes serão eliminados, incluindo potencialmente aqueles definidos por outros módulos contrib / personalizados. Melhor desabilitar a função de validação substituída seletivamente.user_account_form_validate
função padrão que valida mais do que apenas o nome de usuário. Substituir isso pode permitir nomes de usuário duplicados! Adicionei uma resposta que contorna esses problemas.Infelizmente, não há uma maneira direta de fazer isso. Por padrão
user_register_form
euser_profile_form
teruser_account_form_validate
definido como seu primeiro validador no$form['#validate']
.user_account_form_validate()
verifica e limpa o nome, email e assinatura de uma conta. Como parte da verificação do nome, ele faz uma chamadauser_validate_name()
. Esta é a função que queremos substituir, nãouser_account_form_validate
.Seria de esperar que um gancho útil o substituísse, mas infelizmente. Se eu não me importava com a validação do e-mail e assinatura bem como a verificação para ver se o nome é uma duplicata, eu poderia simplesmente remover
user_account_form_validate
a partir$form['#validate']
. Mas isso não é bom. Em vez disso, adiciono um validador adicional que desfaz o trabalhouser_validate_name()
e refaz tudo sem a verificação de caractere especial.Ainda existe uma verificação de caractere especial, no entanto, apenas verifica caracteres invisíveis ou de uso especial.
fonte