Есть ли функция yup, которая проверяет определенную длину?
Я пробовал .min(5)
и .max(5)
, но я хочу что-то, что гарантирует, что число равно 5 символам (т.е. Почтовый индекс).
Есть ли функция yup, которая проверяет определенную длину?
Я пробовал .min(5)
и .max(5)
, но я хочу что-то, что гарантирует, что число равно 5 символам (т.е. Почтовый индекс).
Я не думаю, что там что-то встроено, но это легко реализовать с помощью test
:
yup.string()
.test('len', 'Must be exactly 5 characters', val => val.length === 5)
Для дальнейшего использования, если вы хотите проверить число (почтовый индекс), приведенное выше решение требует небольшой настройки. Функция должна быть:
Yup.number().test('len', 'Must be exactly 5 characters', val => val.toString().length === 5)
.length
не работает на числах, только строки.
Ответ @Tamlyn достаточно хорошо охватывает аспект проверки длины вопроса.
В случае почтового индекса вы можете использовать регулярное выражение для принудительного определения длины и ограничения числовыми значениями в Yup.string()
(вы не захотите использовать Yup.number()
как он не будет поддерживать почтовые индексы, начинающиеся с нуля 0####
)
// ##### format zip code
Yup.string().matches(/^[0-9]{5}$/, 'Must be exactly 5 digits')
// ##### and #####-#### format zip codes
Yup.string().matches(/^[0-9]{5}(?:-[0-9]{4})?$/, 'Must be 5 or 9 digits')
Чтобы добавить к другим ответам, ни один из них не проверяет, что значение существует (я вижу, что некоторые упоминали об этом в комментариях после публикации этого)...
Если его нет и поле оставлено пустым, оно будет пытаться получить длину undefined
или null
, что затем даст вам ошибку javascript и предотвратит работу других условий, таких как .required()
(если вы это было настроено, как, конечно,).
Это, вероятно, будет немного лучше:
// Check we have a value as well
Yup.number().test('len', 'Must be exactly 5 characters', val => val && val.toString().length === 5 )
Почему бы не использовать string.length
от Yup? Кажется, это именно то, что вы ищете:
yup.string().length(5)