我需要一个密码字段的正则表达式。
要求是:
密码长度必须为8到20个字符
必须至少包含一个字母和一个数字以及 !@#$%^&*()_+
中的特殊字符。
不应以特殊字符开头
我试过了
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,20}
它可以工作,但是如何从开始密码限制特殊字符?如果你有一个比上面提到的更有效的正则表达式,请建议。
谢谢
答案 0 :(得分:11)
简单,只需在开头添加一个字符类
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d][A-Za-z\d!@#$%^&*()_+]{7,19}$
[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#"));