Соответствие регулярных выражений начальным и конечным пробелам

#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 разрывает мою голову на части. Мои извинения и благодарность всем вам.