1、至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$/
其中 [\s\S] 中的\s空白符,\S非空白符,所以[\s\S]是任意字符。也可以用 [\d\D]、[\w\W]来表示。
2、至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母):
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
3、至少8个字符,至少1个字母,1个数字和1个特殊字符:
^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$
4、至少8个字符,至少1个大写字母,1个小写字母和1个数字:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
5、至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}
6、最少8个最多十个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}
所求正则表达式为:((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))^.{8,16}$
解释:
^.{8,16}$ # 密码长度为8~16位
((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))# 数字、字母、符号至少包含两种。
数字、字母、字符至少包含两种,可分为4种情况:数字字母,数字符号,字母符号,数字字母符号
(?=.*\d)(?=.*\D) # 必须包含数字和非数字(包括:数字字母,数字符号,数字字母符号)
|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]) # 或者必须包含字母和非字母(包括:符号数字,符号字母,符号数字字母)
public static void main(String[] args) {Pattern p = Pattern.compile("^([a-zA-Z0-9]*[a-zA-Z]+[0-9]+[a-zA-Z0-9]*)*$")
Matcher m = p.matcher("1a11")
while(m.find()){
System.err.print(m.group()+"\t")
}
}
public static void main(String[] args) {
Pattern p = Pattern.compile("^[a-zA-Z0-9]*(([0-9][a-zA-Z])|([0-9][a-zA-Z]))[a-zA-Z0-9]*$")
Matcher m = p.matcher("A1AAA")
while(m.find()){
System.err.print(m.group()+"\t")
}
}
真心觉得8-16位这个条件无法搞出来,建议还是不要用正则匹配了,本来就是模糊匹配中在加定量的匹配...哥觉得正则表达式很强大但也有局限性的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)