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:
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.')
.nullable(),
Is there a way for me to:
Another way is to use /^[0-9][.][0-9]$/, which I think is easier to read. Here is an example with tests:
const regex= /^[0-9][.][0-9]$/;
console.log(regex.test("4.3")); // true
console.log(regex.test("9.0")); // true
console.log(regex.test("91.0")); // false
console.log(regex.test("4e3")); // false
console.log(regex.test("abc")); // false
With Yup, in your case, it would be:
Yup.string()
.matches(
/^[0-9][.][0-9]$/,
'It should be in the form of Digit + Period + Digit'
)
.nullable();
Also, you can copy past the RegEx in regexr.com to get an explanation of each part of it.
You can improve your code just using regex, like in your case:
yup.string()
.matches('^\d{1}\.\d{1}$', 'Doit contenir seulement des caractères numériques.')
.nullable()
\d validates whether first and last characters are digits with second character being a .
Since you only need one number its d{1} before and after the dot.
Edit:
As @bobble bubble mentioned and after testing d{1} is actually redundant. In your case, the regex pattern is ^\d\.\d$. You can use the above pattern if you want to increase the digit count.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With