I need to make a password pattern validator
the password should have:
I found this regex pattern:
Validators.pattern('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]')
however, the validator always claims my input is invalid
errors:
pattern:
actualValue: "Test1234"
requiredPattern: "^/^(?=.*[A-Za-z])(?=.*d)[A-Za-zd!$%@#£€*?&]$"
according to https://regex101.com/r/AfAdKp/1 this value is supposed to be valid.
Edit: to clarify, Test1234 is supposed to work
You have multiple issues with your current regex:
Validators.pattern
doesn't need delimiters but you threw one at beginningWhat you need is this:
Validators.pattern('^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=\\D*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$');
See live demo here
You have to add the quantifier [A-Za-z\d!$%@#£€*?&]{8,}
to repeat the character class a minimum of 8 times and separate the assertions for an uppercase and lowercase character:
Validators.pattern('^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d!$%@#£€*?&]{8,}$')
^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]{8,}$
^
Assert position at the start of the string(?=.*[A-Z])
Positive lookahead to assert that what follows is an uppercase character(?=.*[a-z])
Positive lookahead to assert that what follows is an lowercase character(?=.*\d)
Positive lookahead to assert that what follows is a digit[A-Za-z\d!$%@#£€*?&]{8,}
Match any of the charachters in the character class 8 or more times$
Assert position at the end of the lineconst strings = [
"A88888jf",
"Aa88888jf",
"Aa888jf",
"AAAAAAAAAAA",
"aaaaaaaaaaaaaa",
"2222222222222222",
"1sAdfe44",
"$#fd#######"
];
let pattern = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d!$%@#£€*?&]{8,}$/;
strings.forEach((s) => {
console.log(s + " ==> " + pattern.test(s));
});
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