Maison > Questions et réponses > le corps du texte
J'essaie de créer une expression régulière pour faire correspondre les champs qui doivent contenir 9 chiffres
J'utilise l'expression régulière suivante
/^\d{9,9}$/
Maintenant, le problème c'est quand on le fait
/^\d{9,9}$/.test("123456789") //returns true
Cependant, lorsque j'essaie d'utiliser les correspondances de Yup en utilisant la même expression régulière (transmise dans myRegex ci-dessous)
'myField': yup .string() .nullable() .required('Field is required') .max(9, `Max length 9`) .matches(myRegex, { message: 'Field is invalid', }),
Pour la même entrée, je reçois un message invalide, c'est-à-dire 123456789
Je me demande simplement pourquoi cela se produit ?
Mise à jour : Oui, utilisez value.search(regex) , donc dans mon cas, il exécute "123456789".search(/^d{9,9}$/)
Vous ne savez pas si ce qui précède est le problème ?
P粉3620719922024-04-02 09:57:58
Il semble que votre solution utilise la mauvaise expression régulière
Des problèmes surviennent lorsque la méthode search() de Yup est utilisée avec des expressions régulières. La méthode search() renvoie l'index de la première correspondance et ne compte pas la chaîne complète.
Puisque "123456789" contient 9 chiffres consécutifs, il satisfait l'expression régulière et la méthode search() renvoie l'index de la première occurrence, qui est 0. Puisque 0 est une valeur vraie, Yup l'interprète comme une correspondance échouée et renvoie un message non valide.
Il s'agit d'une expression régulière que vous pouvez essayer d'utiliser /^d{9}$/