내가 제안 할 수있는 최선의 방법은 캡처 그룹에있는 모든 유형의 문자를 캡처하고 적어도 3/4 캡쳐 그룹에 값이 있는지 확인하는 것입니다 (그룹이 아무 것도 일치하지 않으면 빈 문자열).
^(?:([a-z])|([A-Z])|(\d)|(_|[^\w]))+$
암호가 필요한 길이 (예 : 8 ~ 32 자)인지 확인하기 위해 긍정적 인 미리보기를 추가 할 수도 있습니다.
^(?=.{8,32}$)(?:([a-z])|([A-Z])|(\d)|(_|[^\w]))+$
편집 : ([\W_])
는 (_|[^\w])
하는 것과 동일합니다. "W"을 대문자로 바꾸면 모든 단어가 아닌 문자와 일치합니다.
var PASSWORD_RANKING = {
TOO_SHORT: 0,
WEAK: 1,
MEDIUM: 2,
STRONG: 3,
VERY_STRONG: 4
};
/**
* Take a password and returns it's ranking
* based of the strength of the password (length, numeric character, alphabetic character, special character, etc.)
*
* @param password String
* @param minLength Int
*
* @return Int
*/
function rankPassword(password, minLength){
var rank = PASSWORD_RANKING.TOO_SHORT;
var score = 0;
if (typeof minLength !== 'number' || minLength < 6){
minLength = 8;
}
if (typeof password === 'string' && password.length >= minLength){
if (/[A-Z]/.test(password)){ score++;}
if (/[a-z]/.test(password)){ score++;}
if (/[0-9]/.test(password)){ score++;}
if (/[[email protected]#$%^&]/.test(password)){ score++;}
score += Math.floor((password.length - minLength)/2);
if (score < 3){
rank = PASSWORD_RANKING.WEAK;
}
else if (score < 4){
rank = PASSWORD_RANKING.MEDIUM;
}
else if (score < 6){
rank = PASSWORD_RANKING.STRONG;
}
else {
rank = PASSWORD_RANKING.VERY_STRONG;
}
}
return rank;
}
: 당신은 자바 스크립트를 사용하고자하는 경우 또한, 하나의 문자 클래스를 사용하여 교대 (
more details here)
보다 빠른, 내 웹 사이트의 요구에 대해 "Regular Expression cookbook second edition"에서 제시하는 기능을 적용
섹션 4.19에서는 암호 강도를 강화하는 많은 정규 표현식을 제시합니다. 온라인으로 모든 코드 샘플을 볼 수 있습니다 : http://examples.oreilly.com/0636920023630/Regex_Cookbook_2_Code_Samples.html
프로그래밍 언어는 무엇입니까? –
영문자와 숫자 만있는 문자와 숫자 또는 모든 언어를 지원해야합니까? –
Asp.Net에서 RegularExpression 특성을 사용하려고합니다. 그리고 오직 영어로 된 편지들. 감사합니다 – James