Валидация ответов
Один из способов обеспечить качество данных — добавить ограничения к полям данных в форме. Ограничения помогают предотвратить ввод пользователями недействительных или невозможных ответов. Например, при запросе дохода человека нужно избегать нереалистичных значений — отрицательных чисел или слишком высоких значений. Добавить ограничения данных в форму просто. Следуйте шагам ниже:
- Добавьте новый столбец «constraint» в форму.
- В столбце «constraint» введите формулу, определяющую ограничения ответа.
Пример
Рассмотрим пример, где нужно добавить ограничение для дохода человека. Ограничение требует, чтобы доход был в диапазоне от 0 до 1 000 000 долларов. Вот как можно настроить ограничение:
name | constraint |
|---|---|
| Income | . >= 0 & . <= 1000000 |
В приведённом примере «.» в формуле ссылается на переменную вопроса, которая представляет значение, введённое пользователем для вопроса «Income». Ограничение . >= 0 && . <= 1000000 гарантирует, что введённый доход больше или равен 0 и меньше или равен 1 000 000.
Жёсткое ограничение
Жёсткое ограничение полностью блокирует отправку формы, если введённое значение не удовлетворяет выражению. Интервьюер не может продолжить, пока не введёт допустимое значение.
Чтобы добавить жёсткое ограничение, введите выражение в столбец constraint. При желании добавьте понятное сообщение в constraint_message:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | age | Возраст респондента | . > 0 and . <= 120 | Возраст должен быть от 1 до 120 |
| decimal | temperature | Температура тела (°C) | . >= 35 and . <= 42 | Температура должна быть в диапазоне 35–42°C |
| text | phone | Номер телефона | regex(., '^[0-9]{10}$') | Введите 10-значный номер телефона |
Несколько условий
Объединяйте условия с помощью and / or:
. >= 0 and . <= 100
. = 'yes' or . = 'no'
Использование regex() для проверки шаблона
Функция regex(value, pattern) проверяет значение по регулярному выражению:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| text | Адрес электронной почты | regex(., '^[^@]+@[^@]+\.[^@]+$') | Введите действительный адрес электронной почты | |
| text | zip_code | Почтовый индекс | regex(., '^[0-9]{5}$') | Введите 5-значный почтовый индекс |
Ссылки на другие поля в ограничении
Используйте ${fieldname} для ссылки на значения других вопросов:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | end_year | Год окончания | . >= ${start_year} | Год окончания должен быть после года начала |
| decimal | loan_repaid | Погашенная сумма | . <= ${loan_amount} | Нельзя погасить больше суммы кредита |
Мягкое предупреждение
Мягкое предупреждение (также называемое мягким ограничением или предостережением) предупреждает интервьюера, что значение выглядит необычно, но всё же позволяет продолжить. Это полезно, когда значение технически допустимо, но статистически маловероятно.
Наиболее распространённый шаблон — использование note с выражением relevant, которое помечает подозрительное значение, в сочетании с вопросом acknowledge для подтверждения:
type | name | label | relevant |
|---|---|---|---|
| integer | children | Количество детей | |
| note | children_warning | Предупреждение: вы ввели ${children} детей. Пожалуйста, подтвердите корректность. | . > 15 |
| trigger | children_confirm | Подтвердите правильность количества детей | ${children} > 15 |
Мягкое предупреждение только с constraint_message
Для более простого мягкого предупреждения можно сформулировать ограничение, предупреждающее об экстремальных значениях, но при этом допускающее широкий диапазон:
type | name | label | constraint | constraint_message |
|---|---|---|---|---|
| integer | children | Количество детей | . >= 0 and . <= 30 | Это значение кажется очень высоким. Пожалуйста, проверьте. |
Различие между жёсткими и мягкими ограничениями важно для качества данных. Используйте жёсткие ограничения для логически невозможных значений (отрицательный возраст, температура выше 100°C). Используйте мягкие предупреждения для статистически маловероятных, но не невозможных значений — вы не хотите блокировать законные граничные случаи.