需要Regular Expression
密码才能拥有:
答案 0 :(得分:2)
您可以使用以下正则表达式:
^(?=.{8,50}$)(?=(.*?[a-z].*?[A-Z])|(.*?[a-z].*?[0-9])|(.*?[a-z].*?[!@#$%^&*()_+])|(.*?[A-Z].*?[0-9])|(.*?[A-Z].*?[!@#$%^&*()_+])|(.*?[0-9].*?[!@#$%^&*()_+])).*$
我尝试过的是:
的组合Lowercase - Uppercase (.*?[a-z].*?[A-Z]) // Valid Entry
Lowercase - Number (.*?[a-z].*?[0-9]) // Valid Entry
Lowercase - Symbol (.*?[a-z].*?[!@#$%^&*()_+]) // Valid Entry
Uppercase-Number (.*?[A-Z].*?[0-9]) // Valid Entry
Uppercase-Symbol (.*?[A-Z].*?[!@#$%^&*()_+]) // Valid Entry
Number-Symbol (.*?[0-9].*?[!@#$%^&*()_+]) // Valid Entry
有关jsBin的更多内容,您可以查看 JsBin Demo
您还可以查看@areschen
answer,JsBin的灵感来自他的小提琴。
供参考:
Regex : Atleast 2 digits and 1 special char. Regex : I want this & that - As pointed by @Barmar
答案 1 :(得分:1)
谢谢大家的时间。 多次尝试后,以下模式适用于我:
注意: 在表达式检查" 2每个" (大写,小写,0-9)
^(?=.{8,50}$)(?=(.*[A-Z]){2})(?=(.*[a-z]){2})(?=(.*[0-9]){2})(?=\\S+$).*$
否则,
^(?=(?:\\D*\\d){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2})(?=\\S+$).{8,50}$
并且,在检查"任何2" of(大写,小写,0-9,定义的特殊符号集)
^(?=.{8,50}$)(?=([A-Z,a-z,0-9,[!,~,*,$]]+){2})(\\S+$)$
说明强>
(?=.{8,50}$)
(?=将条件与后面的其余条件进行对比),此条件检查输入的长度为8到50
(?=(.*[A-Z]){2})
(其中,。*任何字符0次或更多次,后跟大写字母)和{2},表示条件应该应用两次,因此大写字母存在2次
(?=(.*[a-z]){2})
(其中,。*表示任意字符0次或更多次,后跟LOWERCASE字母)和{2},表示条件应该应用两次,因此LOWERCASE字母存在2次
(?=(.*[0-9]){2})
(其中,。*表示任意字符0次或更多次,后跟DIGIT)和{2},表示条件应该应用两次,因此DIGIT存在2次
(?=\\S+$)
(其中,\ S表示非空格,+表示0或更多次,因此它会检查所有字符是否都是非空格字符。因此,如果有空格,则此条件将失败。
注意:" \"我用于java转义字符.*
这是最后一个条件,这意味着我上次检查后的任何其他字符(例如我的情况下的数字,所以不是必须的,最后一个字符应该是数字。
注意:如果只有1个或最后一个条件,我们不会使用?=来AND。
在java中,我尝试了这个小程序:
String input = "Dv1D v1bb";
String pattern = "^(?=.{8,50}$)(?=(.*[A-Z]){2})(?=(.*[a-z]){2})(?=(.*[0-9]){2})(?=\\S+$).*$";
System.out.println(Pattern.matches(pattern, input));
答案 2 :(得分:0)
此正则表达式也适用于Unicode字符。
^(?=.{8,50}$)(?=(.*?[\\p{Ll}].*?[\\p{Lu}])|(.*?[\\p{Ll}].*?[\\p{Nd}])|(.*?[\\p{Ll}].*?[!@#$%^&*+=?])|(.*?[\\p{Lu}].*?[\\p{Nd}])|(.*?[\\p{Lu}].*?[!@#$%^&*+=?])|(.*?[\\p{Nd}].*?[!@#$%^&*+=?])).*$