我需要一个密码字段的正则表达式。
要求如下:
密码必须是8到20个字符长度。
必须包含至少一个字母、一个数字和一个来自
!@#$%^&*()_+
的特殊字符。不应以特殊字符开头。
我已经尝试过:
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,20}
它是有效的,但如何限制密码以特殊字符开头?如果您有比上面提到的更高效的正则表达式,请建议。
谢谢
我需要一个密码字段的正则表达式。
要求如下:
密码必须是8到20个字符长度。
必须包含至少一个字母、一个数字和一个来自!@#$%^&*()_+
的特殊字符。
不应以特殊字符开头。
我已经尝试过:
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,20}
它是有效的,但如何限制密码以特殊字符开头?如果您有比上面提到的更高效的正则表达式,请建议。
谢谢
很简单,只需要在开头添加一个字符类
^(?=.*[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#"));
\w
替换是可以的,但是在第一个字符类[A-Za-z\d]
中可能会出现问题,因为\w
=> [A-Za-z0-9_]
。请注意下划线_
是一个特殊字符,如果用户输入_asdf234$%
可能会给你带来麻烦。我认为这不能被视为有效的。希望对你没问题 :) - nu11p01n73R