Как запретить регистрацию пользователей, если их имя пользователя содержит пробел?
Я пытаюсь запретить пользователю сохраняться с правилами, когда он/она пытается использовать имя пользователя, содержащее пробелы. Я уже читал Как я могу запретить пробелы в именах пользователей? и использовал модуль Ограничения пользователей для достижения этой цели, но я хотел бы использовать правила для выполнения некоторых других действий (например, проверка того, что имя пользователя не содержит более 20 символов).
Итак, что я хотел бы сделать, так это показать сообщение об ошибке на странице и сохранить все заполните информацию в форме, не сохраняя ее. Возможно ли это сделать?
Это правило, которое я сейчас использую:
- Событие: Перед сохранением учетной записи пользователя.
-
Условия: НЕ выполнять пользовательский PHP-код.
<?php preg_match('/\s/',$account->name) == 1; ?>
- Действия: Показать сообщение на сайте.
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 правил каждый раз. Я также думаю, что это очень эффективно для производительности.
Я не думаю, что использование правил для проверки формы - правильный путь. Это слишком запутанно и сложно.
Я скорее изменю форму в регистрационной форме и добавлю свой собственный обработчик проверки.
Или попробуйте использовать модуль проверки полей. Я никогда раньше не использовал его в пользовательских полях, но я не понимаю, почему это не сработает.