#php #regex #drupal-7 #drupal-webform
#php #регулярное выражение #drupal-7 #drupal-веб-форма
Вопрос:
Я видел несколько сообщений об этом, но не смог найти решение для моего сценария. У меня есть форма, в которой я пытаюсь выполнить проверку на наличие начальных и конечных пробелов. Находится внутри hook_form_validation_validate для Drupal с использованием API проверки Webform. Я использовал несколько вариантов, но эти два кажутся наиболее логичными.
foreach ($items as $key => $val) {
// @todo: Check for scenarios where $val is an array.
$valCheckSpace = preg_match('/^s*/', $val);
if ($valCheckSpace) {
$errors[$key] = t('%item cannot have leading or trailing spaces.', array('%item' => $components[$key]['name'], '%num' => $max_length));
}
}
return $errors;
}
и этот:
foreach ($items as $key => $val) {
// @todo: Check for scenarios where $val is an array.
$valCheckSpace = preg_match('/^s*/g', $val);
if ($valCheckSpace) {
$errors[$key] = t('%item cannot have leading or trailing spaces.', array('%item' => $components[$key]['name'], '%num' => $max_length));
}
}
return $errors;
}
Вот еще один:
foreach ($items as $key => $val) {
// @todo: Check for scenarios where $val is an array.
$valCheckSpace = preg_match('/^s/', $val);
if ($valCheckSpace) {
$errors[$key] = t('%item cannot have leading or trailing spaces.', array('%item' => $components[$key]['name'], '%num' => $max_length));
}
}
return $errors;
}
При использовании VSCode и XDebug в этих точках останова ничего не срабатывает, и запись проходит, когда она должна выдавать ошибку.
Любая информация об этом была бы весьма признательна.
Вот пример ввода данных в поле формы. Изображение поля формы с записями здесь
На изображении выше показано, что вводится. После записей также есть конечные пробелы.Ожидаемые результаты — выдача ошибки, чтобы пользователь знал, что начальные или конечные пробелы недопустимы.
Комментарии:
1. Не могли бы вы добавить некоторые образцы входных данных и ожидаемое совпадение?
2. Я добавил изображение того, что вводится, и объяснение того, каким я хотел бы получить результат. Записи представляют собой просто числовые записи с начальными и конечными пробелами. Должно быть выдано сообщение об ошибке, чтобы пользователь знал, что начальные или конечные пробелы недопустимы.
3. Что вы имели в виду под «выдачей ошибки»? Ни один из ваших примеров буквально ничего не выдает. Кроме того, вы уверены, что не используете что-то вроде этого: drupal.org/project/trim ?
Ответ №1:
(Синтаксис Perl) Поиск строк с начальным или конечным пробелом: (^[ ].*)|(.*[ ]$)
Поиск строк с начальным или конечным пробелом (пробелом или табуляцией): (^W.*)|(.*W$)
Ответ №2:
Как оказалось, Webform ранее выполнял обрезку, но обрезанные данные не распознались по сравнению с тем, что уже было в БД, и в него поступали повторяющиеся записи. Приведенный выше код на самом деле правильный. Drupal разрывает мою голову на части. Мои извинения и благодарность всем вам.