正则验证字母、数字、特殊字符三种以上组合,必须包含特殊字符
/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}$/
# 正则验证字母、数字、特殊字符两种以上组合,必须包含特殊字符
^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$
() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
^ 匹配一行的开头位置。
(?![a-zA-Z]+$):断言此位置之后,字符串结尾之前,所有的字符不能全部由26个英文字母组成。
(?![a-zA-Z]+$):断言此位置之后,字符串结尾之前,所有的字符不能全部由26个英文字母组成。
(?![^\da-zA-Z]+$):断言此位置之后,字符串结尾之前,所有的字符不能全由数字和26个英文字母组成
?=、?<=、?!、?<! 的使用区别
https://www.runoob.com/regexp/regexp-syntax.html