Check that a string equals "X.X", where X is a 0-9 digit

I am trying to verify that a string corresponds to this format "x.x" with x, a digit belonging to [0-9].

Right now, what I am doing is:

  • checking that the string is at least, and at most, made of 3 characters
  • checking that the string matches the regex [0-9.] (only digits and a dot)

So right now, I have:

      myString: Yup.string()
        .min(3, "Minimum 3 caractères: XXX.")
        .max(3, "Maximum 3 caractères: XXX.")
        .matches(/^[0-9]+$/, 'Doit contenir seulement des caractères numériques.')

Is there a way for me to:

  • check that myString[0] and myString[2] are digits
  • check that myString[1] is a dot

>Solution :

What about just using the matches and pass a regex that validates the list of requirements in one go?

const number = string().matches(/\d{3,}\.\d{3,}/).nullable();

number.validateSync("123.456") // pass
number.validateSync("12.456") // fail min
number.validateSync("123456") // fail no dot
number.validateSync("1236.4566") // pass

Here \d{3,} matches a number with min 3 digits long followed by a dot \. followed by another \d{3,}.

Leave a Reply