Как запретить регистрацию пользователей, если их имя пользователя содержит пробел?


Я пытаюсь запретить пользователю сохраняться с правилами, когда он/она пытается использовать имя пользователя, содержащее пробелы. Я уже читал Как я могу запретить пробелы в именах пользователей? и использовал модуль Ограничения пользователей для достижения этой цели, но я хотел бы использовать правила для выполнения некоторых других действий (например, проверка того, что имя пользователя не содержит более 20 символов).

Итак, что я хотел бы сделать, так это показать сообщение об ошибке на странице и сохранить все заполните информацию в форме, не сохраняя ее. Возможно ли это сделать?

Это правило, которое я сейчас использую:

  • Событие: Перед сохранением учетной записи пользователя.
  • Условия: НЕ выполнять пользовательский PHP-код. <?php preg_match('/\s/',$account->name) == 1; ?>
  • Действия: Показать сообщение на сайте.
Author: Community, 2014-08-02

2 answers

@Йерун, Затем я бы предложил изменить только одну пользовательскую форму в форме регистрации пользователя и добавить функцию проверки, которая будет проверять каждый случай для вас.

/**
 * Implements hook_form_FORM_ID_alter().
 */
// Alter the registration form
function CUSTOM_MODULE_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  // Add your own function to the array of validation callbacks
  $form['#validate'][] = 'CUSTOM_MODULE_user_validation';
}

/**
 * Custom function to validate the user creations.
 */
function CUSTOM_MODULE_user_validation(&$form, &$form_state) {
  $name = $form_state['values']['name'];
  if (preg_match('/\s/',$name)) {
     form_set_error('name', t('Name should not contain white spaces.'));
  }
}

Его проще использовать и он не вызывает API правил каждый раз. Я также думаю, что это очень эффективно для производительности.

 5
Author: Aneek Mukhopadhyay, 2015-09-12 20:28:44

Я не думаю, что использование правил для проверки формы - правильный путь. Это слишком запутанно и сложно.

Я скорее изменю форму в регистрационной форме и добавлю свой собственный обработчик проверки.

Или попробуйте использовать модуль проверки полей. Я никогда раньше не использовал его в пользовательских полях, но я не понимаю, почему это не сработает.

 0
Author: J. Reynolds, 2014-08-02 17:00:04