Apakah ada cara untuk mengizinkan karakter khusus dalam nama pengguna seperti "#" dan "~"?
9
Anda harus mengganti defualt user_validate_name ($ name) :
Verify the syntax of the given name.
Untuk melakukannya, tentukan kode validasi nama pengguna Anda dalam modul khusus Anda
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
$form['#validate'] = array();
$form['#validate'][] = 'registration_username_validate';
}
}
Dan di dalam fungsi registration_username_validate lakukan logika Anda untuk memungkinkan karakter khusus Anda.
Peduli tentang masalah keamanan yang disebabkan oleh mengizinkan karakter khusus di nama pengguna dan tentang masalah tampilan yang tidak membersihkan nama pengguna dapat menyebabkan tema.
$form['#validate'] = array();
akan mengalahkan setiap penangan yang valid yang ada, termasuk yang berpotensi diatur oleh modul contrib / custom lainnya. Lebih baik selektif membatalkan fungsi validasi ditimpa.user_account_form_validate
fungsi default yang memvalidasi lebih dari sekadar nama pengguna. Mengganti ini bisa membuat nama pengguna duplikat! Saya telah menambahkan jawaban yang mengatasi masalah ini.Sayangnya, tidak ada jalan lurus ke depan untuk melakukan ini. Secara default
user_register_form
danuser_profile_form
telahuser_account_form_validate
ditetapkan sebagai validator pertama mereka di$form['#validate']
.user_account_form_validate()
memeriksa dan membersihkan nama, email, dan tanda tangan akun. Sebagai bagian dari memeriksa nama itu membuat panggilan keuser_validate_name()
. Ini adalah fungsi yang ingin kita timpa, bukanuser_account_form_validate
.Orang akan berharap untuk mendapatkan kait yang bermanfaat untuk menimpanya, tetapi sayang sekali. Jika saya tidak peduli tentang validasi email dan tanda tangan serta cek untuk melihat apakah nama adalah duplikat, saya hanya bisa menghapus
user_account_form_validate
dari$form['#validate']
. Tapi itu tidak baik. Sebagai gantinya, saya menambahkan validator tambahan yang membatalkan pekerjaanuser_validate_name()
dan mengulang semuanya tanpa pemeriksaan karakter khusus.Masih ada pemeriksaan karakter khusus, namun hanya memeriksa karakter penggunaan tidak terlihat atau khusus.
sumber