任何人都可以帮我写下以下说明中的正则表达式吗?
密码包含以下五个类别中至少三个的字符:
密码的最小长度为6。
答案 0 :(得分:3)
更好的方法是分解每个条件并为每个条件设置一个正则表达式。然后计算输入密码满意的数量。通过这种方式,您甚至可以告诉用户密码是否是平均值,符合标准还是非常强的密码。
if (password.length < 6) {
alert("password needs to be atleast 6 characters long");
}
var count = 0;
//UpperCase
if( /[A-Z]/.test(password) ) {
count += 1;
}
//Lowercase
if( /[a-z]/.test(password) ) {
count += 1;
}
//Numbers
if( /\d/.test(password) ) {
count += 1;
}
//Non alphas( special chars)
if( /\W/.test(password) ) {
count += 1;
}
if (count < 3) {
alert("password does not match atleast 3 criterias");
}
不确定如何使用正则表达式匹配unicode字符。休息所有条件都在上面。
答案 1 :(得分:1)
[A-Za-z!$#%\d\u0100]{6}
匹配aS1%eĀ
。
\u0100
适用于Â。您可以插入所需的其他Unicode代码。你可以找到它们here。
编辑:对于至少6个字符,正确的正则表达式为[A-Za-z!$#%\d\u0100]{6,}
。
编辑2:要包含一系列Unicode字符(让它成为Latin Extended-B),正则表达式应该看起来像^[A-Za-z!$#%\d\u0100-\u017f]{6,}$
。您可以找到Unicode代码范围here。
编辑3:我开发了一个小功能,可以检查给定的密码是否符合标准。您需要在函数中定义unicode范围。
function isValidPassword(password) {
var unicodeRange = "\\u0100-\\u0105";
var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange];
// check whether it doesn't include other characters
var re = new RegExp("^[" + criteria.join("") +"]{6,}$");
if(!re.test(password)) return false;
var minSatisfiedCondition = 3;
var satisfiedCount = 0;
for( var i=0; i < criteria.length; i++) {
re = new RegExp("[" + criteria[i] + "]");
if(re.test(password)) ++satisfiedCount;
}
return (satisfiedCount >= minSatisfiedCondition);
}
有一个工作样本here。