javascript - Yup-validering med regex med matches-problem
Så jag har nedanstående validering med Yup :
const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();
Med denna validering passerar 'hello world' som förväntat. Vad som däremot förvirrar mig är varför hello WORLD eller hello ,&$#$ world också passerar.
Å andra sidan, om vi bara anger ogiltiga tecken som *%$&#$ ($#, går detta inte igenom och visar mig felet. Så, som jag kan se, ger det mig bara felet om HELA inmatningen är ogiltig.
Det jag letar efter är hur man använder Yup matches-metoden för att inte tillåta om användaren skriver till exempel hello ,*&) world.
Kan någon hjälpa mig med detta?
Svar #1
Ditt regex bör täcka hela din sträng, genom att använda ^ och $ för att beteckna början och slutet av strängen:
/^[abcdefghijklmnopqrstuvwxyz]+$/
Annars matchar den en del av din sträng, vilket är anledningen till att den matchar när du har en blandning av bra och dåliga karaktärer, men misslyckas när alla karaktärer är dåliga.
Du kan förkorta regexen genom att använda ett teckenintervall på det här sättet:
/^[a-z]+$/
Du kan använda detta onlineverktyg för att skapa och testa din regex.
Svar #2
Detta fungerade för mig:
const validationSchema = yup.object().shape({
password: yup
.string()
.required("Please enter your password")
.matches(
/^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/,
"Password must contain at least 8 characters, one uppercase, one number and one special case character"
),
confirmPassword: yup
.string()
.required("Please confirm your password")
.oneOf([yup.ref('password'), null], "Passwords don't match.")
});
Bryta ner regex:
(?=.{8,}): Ange det minsta antalet tecken
((?=. [!@#$%^&()-=+{};:,<.>]){1}): Verifiera om det finns minst 1 tecken i listan "!@#$%^&*()-=+{};:,<.>"
(?=.*\d): Kontrollera om det finns en siffra
((?=.*[a-z]){1}): Kontrollera om det finns ett alfabetisk gemener
((?=.*[A-Z]){1}): Verifiera om det finns en stor bokstav
Du kan testa regex-koden på https://regex101.com/r/rYT2yE/1.
