ユーザー名にスペースが嫌いです。ユーザーは、気づかずに2つ以上のスペースを簡単に追加できます。 Drupalでデフォルトで許可されているよりも、ユーザー名の形式をより詳細に制御する必要があります。
私は最近、ユーザー名にスペースやその他の文字を許可しないカスタムモジュールを作成しました。コードについてコメントしてください。 sername_check も変更して、ajaxコールバックで同じ検証を実行します。
//implement hook_form_FORM_ID_alter
function custom_form_user_register_form_alter(&$form, $form_state, $form_id) {
//define validation function
$form['#validate'][] = 'my_user_register_validate';
//overwrite the username help text
$form['account']['name']['#description'] = 'Username has to be between 5-15 characters long and can only contain letters and numbers';
}
function my_user_register_validate($form, &$form_state) {
$output['error'] = FALSE;
$username = $form_state['input']['name'];
$password = $form_state['input']['pass']['pass1'];
if (strlen($username) < 5 || strlen($username) > 15) {
$output['error'] = TRUE;
$output['msg'] = t('The username has to be between 5 and 15 characters long. ');
}
if (strpos($username,' ') > 0 || strpos($username,'.') > 0 || strpos($username,'-') > 0 || strpos($username,'_') > 0 || strpos($username, "'") !== FALSE ){
$output['error'] = TRUE;
$output['msg'] = t('Username cannot contain spaces . - _ ' . chr(39) );
}
//display username errors
if ($output['error']){
//drupal_set_message( $output['msg'], 'error');
form_set_error('name', $output['msg']);
}
}
ユーザー制限 contribモジュールは、Drupal 7.から削除された「アクセスルール」機能の代替です。
ユーザー名の作成でこれを防ぐためのアクセスルールを作成できます。
adminに移動します"アクセス制御、タブアカウントルール"ルールの追加(admin/access/rules/add)とルールを追加します
% %
% %
(最後の行にはASCII 255文字)
ダッシュの同様のルールも可能です。
これは drupal.org での会話に基づいています
Drupal7でユーザー名検証を使用すると、一部のタイプの文字と空白を簡単に削除でき、独自のタイプの検証を追加することもできます。以下の機能を確認してください。
function my_module_my_form_validate($form, &$form_state) {
//birth year
$year_of_birth = $form_state['values']['year_of_birth'];
if ($year_of_birth && ($year_of_birth < 1900 || $year_of_birth > 2000)) {
form_set_error('year_of_birth', 'Enter a year between 1900 and 2000.');
}
//username
$username = $form_state['values']['uname'];
if (strpos($username,' ') > 0 || strpos($username,'.') > 0 || strpos($username,'-') > 0 || strpos($username,'_') > 0 || strpos($username, "'") !== FALSE ){
form_set_error('uname','User name cannot contain spaces . - _ ' . chr(39) );
}
}