有人能帮我写以下描述的正则表达式吗?
密码包含以下五个类别中至少三个的字符:
密码的最小长度为6。
发布于 2010-09-09 07:34:57
处理此问题的更好方法是拆分每个条件,并对每个条件都有一个正则表达式。然后计算有多少人对输入的密码感到满意。通过这种方式,您甚至可以告诉用户密码是平均的、符合标准的还是非常强的密码。
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");
}不确定如何使用regex匹配unicode字符。休息所有条件以上都可用。
发布于 2010-09-09 07:40:37
[A-Za-z!$#%\d\u0100]{6}与aS1%eĀ匹配。
\u0100是为了更好的表达。您可以插入所需的其他Unicode代码。你可以找到他们这里。
编辑:对于最少6个字符,正确的正则表达式是[A-Za-z!$#%\d\u0100]{6,}。
编辑2:要包含一系列Unicode字符(假设是拉丁文扩展-B),正则表达式应该类似于^[A-Za-z!$#%\d\u0100-\u017f]{6,}$。您可以找到Unicode代码范围这里。
编辑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);
}有一个工作样本这里。
https://stackoverflow.com/questions/3674564
复制相似问题