web-dev-qa-db-fra.com

Validation à l'aide de Yup pour vérifier la longueur de chaîne ou de nombre

Existe-t-il une fonction yup qui valide une longueur spécifique?

J'ai essayé .min(5) et .max(5), mais je veux quelque chose qui assure que le nombre est exactement de 5 caractères (c'est-à-dire le code postal).

17
reectrix

Je ne pense pas qu'il y ait quoi que ce soit intégré mais c'est facile à implémenter avec test :

yup.string()
  .test('len', 'Must be exactly 5 characters', val => val.length === 5)

https://runkit.com/tamlyn/5ad9b99a4ba1230012d7ac21

5
Tamlyn

@ efru's answer fonctionne très bien pour les nombres de moins de 22 caractères. Cependant, val.toString().length ne fonctionne pas pour les nombres supérieurs à 22 caractères. La raison en est que les nombres plus importants sont convertis au format exponentiel lorsqu'ils sont convertis en chaîne en javascript.

La solution que j'ai trouvée qui fonctionne le mieux est:

Yup.number (). Test ('len', 'Doit être exactement 25 caractères', val => Math.ceil (Math.log10 (val + 1)) === 25)

0
tschumann

Pour référence future, si vous cherchez à valider un numéro (code postal), la solution ci-dessus nécessite un léger ajustement. La fonction doit être:

Yup.number().test('len', 'Must be exactly 5 characters', val => val.toString().length === 5)

.length ne fonctionne pas sur les nombres, seulement sur les chaînes.

0
efru