Home  >  Q&A  >  body text

Differences in regular expression behavior

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?

P粉996763314P粉996763314223 days ago342

reply all(1)I'll reply

  • P粉362071992

    P粉3620719922024-04-02 09:57:58

    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}$/

    reply
    0
  • Cancelreply