密码的正则表达式:"Atleast 1个字母,1个数字,1个特殊字符,不应该以特殊字符开头"

adi*_*iga 9 javascript regex asp.net-mvc

我需要一个密码字段的正则表达式.

要求是:

  1. 密码长度必须为8到20个字符

  2. 必须包含至少一个字母一个数字以及一个特殊字符!@#$%^&*()_+.

  3. 不应该以特殊字符开头

我试过了

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,20}
Run Code Online (Sandbox Code Playgroud)

它有效,但是如何限制特殊字符开始密码?此外,如果你有一个比上面提到的更有效的正则表达式,请建议.

谢谢

nu1*_*73R 11

它很简单,只需在开头添加一个字符类

^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$
Run Code Online (Sandbox Code Playgroud)
  • [A-Za-z\d] 确保第一个字符是字母或数字.

  • [A-Za-z\d!@#$%^&*()_+]{7,19}将匹配最小7个最多19个字符.这是必需的,因为他先前的字符类将使用单个字符,使字符串中的字符总数最小为8,最大为20.

  • $将正则表达式锚定在字符串的末尾.确保我们的有效密码没有任何内容

正则表达式演示

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#"));
Run Code Online (Sandbox Code Playgroud)