ошибка формы обновления неверных данных при обновлении текстового подтверждения элемента - PullRequest
1 голос
/ 20 января 2020

Я использую следующий код для обновления проверки текста строкой:

function updateform(strtokens) {

  var form = FormApp.openById(#formid#);
  var textItem = form.getItemById(#formid#);
  var textValidation = FormApp.createTextValidation()
 .requireTextMatchesPattern(strtokens)
 .build();

textItem.asTextItem().setValidation(textValidation);

return form.getPublishedUrl();

} 

Я получаю сообщение об ошибке invalid data updating form в строке textItem.asTextItem().setValidation(textValidation)

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

Возможно ли объяснение любой из следующих проблем?

  • strtokens имеет формат: text1|text2|text3|.. et c, это может быть очень долго. text1, et c также включают специальные символы. note Примечание strtokens объединяет произвольно сгенерированный текст длиной 10, а количество текста в настоящее время установлено равным 10. Текст генерируется путем случайной выборки 10 символов из A-Z, a-z, 0-9 и специальных символов. пожалуйста, посмотрите примеры ниже, где они вызывают и не вызывают ошибку.

  • Изменяется ли идентификатор формы / идентификатор элемента так, что он не идентифицируется точно? Я получил идентификатор формы из URL-адреса и получил идентификатор элемента после проверки идентификатора в html формы.

Спасибо за помощь!

1 Ответ

2 голосов
/ 20 января 2020

Ответ:

Параметр pattern, который вы передаете в .requireTextMatchesPattern(pattern), является регулярным выражением, а символ * является квантификатором RegEx. При неправильном использовании шаблон будет недействительным и выдает ошибку.

Дополнительная информация:

Для регулярных выражений символ * означает:

Ноль или более вхождений предыдущего элемента.

Например:

  • Для выражения stacko*verflow будут соответствовать следующие строки:
    • stackverflow
    • stackoverflow
    • stackooverflow
    • stackoooverflow
    • stackoooverflow

А и так далее, при условии, что строка начинается с stack и заканчивается verflow.

В примерах, которые вы предоставили в приведенных выше комментариях, у вас есть следующие регулярные выражения:

1:

WvGMkRIQf>|X2ANqg<SGu|j$aN6on**L|v5$N#z7dW!|XU5#5Ml&8Q|Bz%EzuWLiE|a&Cv!IE3E4|-IK4>#ljA8|5ytvZeRJLd|dAOe2L6-g7|P>1UQ<iMYO|yoCZrb7Tom|cuIfBUN%js|FfIq2ASpF0|gZDf8abN1p|mHV>swDHwR|rDgknKK3CS|<$dbw0TfvO|K6xCL&zqk5

2:

hFI*ek0Ypa|>O3eLWaNyI|34UGs*BGWG|4xTlqI5$1v|6J5b4hxhQB|e!UGlGUe!d|RuQgm!07UR|JSe%zMrw84|kEffwcplYp|V#EOUi9xrK|mxxLLZ9rcJ|Z8-PgwizSH|j#lPl3nt3l|q$qzansAMi|<>FOR&yGl2|O0@hIat24N|7DVrI>Oz!5|BgmHjZpoC<|Q53a0cwxw<

3:

mOU-4p%ArY|o>&cL!JMeN

4:

*<R2&$fKfz|x&c&mmNdgT

Вы можете проверить это для себя, используя онлайн Валидатор регулярных выражений , но я объясню это здесь.

В первом примере виновником является третья строка: j$aN6on**L. Двойная звездочка (**) не является допустимым выражением, поскольку первую звездочку необходимо экранировать с помощью \ (j$aN6on\**L).

Во втором примере ошибка не выдается, поскольку он проверяет правильно. То же самое можно сказать и о третьем примере.

Четвертый пример также выдает ошибку - на этот раз, однако, это происходит из-за строки, начинающейся с символа *. Поскольку символ * указывает на ноль или более вхождений предыдущего элемента, но до *.

символов нет. Вы можете проверить основы c понятия регулярных выражений, чтобы получить более подробное понимание.

Надеюсь, это полезно для вас!

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...