I'm trying to build a regular expression to match fields that should contain 9 digits
I use the following regular expression
/^\d{9,9}$/
Now, the problem is when doing it
/^\d{9,9}$/.test("123456789") //returns true
However, when I try to use the same regular expression (passed in myRegex below) using Yup's match
'myField': yup .string() .nullable() .required('Field is required') .max(9, `Max length 9`) .matches(myRegex, { message: 'Field is invalid', }),
For the same input I get invalid message i.e. 123456789
Just wondering why this happens?
renew: Yes, use value.search(regex) , so in my case it runs "123456789".search(/^\d{9,9}$/)
Not sure if the above is the problem?
It seems your solution uses the wrong regular expression
Problems arise when Yup's search() method is used with regular expressions. The search() method returns the index of the first match and does not count the complete string.
Since "123456789" contains 9 consecutive digits, it satisfies the regular expression and the search() method returns the index of the first occurrence, which is 0. Since 0 is a true value, Yup interprets it as a failed match and returns an invalid message.
This is a regular expression you can try using
/^\d{9}$/