I need a regular expression for a password field.
The requirement is:
The password Must be 8 to 20 characters in length
Must contain
Its simple, just add one more character class at the begining
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$
[A-Za-z\d]
Ensures that the first character is an alphabet or digit.
[A-Za-z\d!@#$%^&*()_+]{7,19}
will match minimum 7 maximum 19 character. This is required as he presceding character class would consume a single character making the total number of characters in the string as minimum 8 and maximum 20.
$
Anchors the regex at the end of the string. Ensures that there is nothing following our valid password
Regex Demo
var pattern = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$/);
console.log(pattern.test("!@#123asdf!@#"));
console.log(pattern.test("123asdf!@#"));
console.log(pattern.test("12as#"));