regex 정규표현식 - 정규 표현식의 배열 만들기 Javascript




예제 정규식 (5)

내가 암호를 몇 가지 일반적으로 바보 같은 것들과 비교하여 사용자가 이들 중 하나를 선택할 수 없도록하지만, 지금까지 작성한 함수 (스크립트 태그 사이에 넣을 때 자바 스크립트가 인식되지 않게 함)를 작성하고 싶습니다. Firebug에 의해). 배열 생성이 잘못되었다고 가정합니다.

function unacceptable(pwd){
    var unforgivable = [
    /password/gi, /*g matches any occurance of sequence, i checks case insensitive*/
    /12345678/g,
    /8675309/g,
    /[a-z]{8,}/gi,
    /qwerty/gi,
    /asdfg/gi,
    /qazwsx/gi,
    /zxcvb/gi,
    /letmein/gi,
    /trustno1/gi,
    /omnicloud/gi,
    /monkey/gi];
    for (var i=0; i<unforgivable.length; i++)
        if(pwd.match(unforgivable[i])) return true;
    return false;
} 

Answers

Array.some 사용하는 것이 Array.some , 하나의 반환 값이 true가되면 배열을 반복 반복하지 않게됩니다.

function unacceptable(pwd){
    return [
        /password/gi,
        /12345678/g,
        /8675309/g,
        /[a-z]{8,}/gi,
        /qwerty/gi,
        /asdfg/gi,
        /qazwsx/gi,
        /zxcvb/gi,
        /letmein/gi,
        /trustno1/gi,
        /omnicloud/gi,
        /monkey/gi
    ].some(function(regexp){
        return regexp.test(pwd);
    });
}

루프를 모든 단어를 하나의 정규식 (문자로 구분)에 넣고 정규식 엔진이 모든 단어를 한꺼번에 검색하도록 테스트 할 필요는 없습니다. 당신은 이렇게 할 수 있습니다 :

function unacceptable(pwd){
    var unforgivable = [
        "password",
        "12345678",
        "8675309",
        "[a-z]{8,}",
        "qwerty",
        "asdfg",
        "qazwsx",
        "zxcvb",
        "letmein",
        "trustno1",
        "omnicloud",
        "monkey"
    ];
    var re = new RegExp(unforgivable.join("|"), "i");
    return re.test(pwd);
}

데모 작업은 여기에서 : http://jsfiddle.net/jfriend00/cyVbC/

추신 : 모든 단어를 배열에 넣을 필요는 없습니다. 전체 정규 표현식을 미리 선언 할 수는 있지만 배열을 유지하는 것이 더 쉬운 가독성있는 코드 용으로 만들었다 고 생각했습니다.

그것은 또한 이것 일 수 있습니다 :

var unforgivable = /password|12345678|8675309|[a-z]{8,}|qwerty|asdfg|qazwsx|zxcvb|letmein|trustno1|omnicloud|monkey/i;

function unacceptable(pwd){
    return unforgivable.test(pwd);
}

이것에 대해 뭔가를 찾았고 다른 누구도 언급하지 않았으므로 언급이 필요합니다. 강력한 암호를 보장하기 위해 블랙리스트를 사용해서는 안됩니다. 그것은 유지 보수 구멍이며 단지 귀하의 목록에없는 더 나쁜 암호로 연결됩니다. 대신 강력한 암호 정책을 적용하십시오.

P4ssw0rd! 많은 psuedo 강한 정책을 통과 할 것이나 균열에 초 걸릴 것입니다.

유일한 효과적인 블랙리스트는 암호 해독 기술에 사용되는 모든 단어 목록 및 조합 스크립트를 포함하는 것입니다. 이는 사용자가 암호가 충분한 지 확인하기 위해 분 / 시간 / 일을 기다리는 것을 의미합니다.

나는 이것이 특정 질문에 대답하지 않는다는 것을 안다.하지만 효과적인 암호 검증이 무엇인지에 대한 조언을하려고 노력한다.


뒤에 쉼표가 있습니다. javascript에서는 후행 쉼표를 사용할 수 없습니다.

var unforgivable = new Array(
    /password/gi, /*g matches any occurance of sequence, i checks case insensitive*/
    /12345678/g,
    /8675309/g,
    /[a-z]{8,}/gi,
    /qwerty/gi,
    /asdfg/gi,
    /qazwsx/gi,
    /zxcvb/gi,
    /letmein/gi,
    /trustno1/gi,
    /omnicloud/gi,
    /monkey/gi
)

이것은 몇 가지 다른 답변에 나타나는 클로저에 대한 몇 가지 (가능한) 오해를 해결하려는 시도입니다.

  • 클로저는 내부 함수를 반환 할 때 생성 될뿐만 아니라 사실, 닫는 함수를 생성하기 위해 닫는 함수 를 전혀 반환 할 필요가 없습니다 . 대신 내부 함수를 외부 범위에있는 변수에 할당하거나 나중에 즉시 호출 할 수있는 다른 함수에 인수로 전달할 수 있습니다. 따라서 내부 함수가 호출 될 때마다 내부 함수가 호출 될 때마다 내부 함수가 해당 클로저에 액세스 할 수 있기 때문에 내부 함수 가 호출되는 즉시 내부 함수가 닫히게됩니다.
  • 클로저는 해당 범위 에있는 이전 변수 의 복사본을 참조하지 않습니다 . 변수 자체는 클로저의 일부이므로 해당 변수 중 하나에 액세스 할 때 표시되는 값은 액세스 할 때의 최신 값입니다. 이것은 루프 내부에서 생성 된 내부 함수가 까다로울 수 있습니다. 함수가 생성되거나 호출 될 때 변수 복사본을 얻는 대신 각 외부 변수가 동일한 외부 변수에 액세스 할 수 있기 때문입니다.
  • 클로저의 "변수"에는 함수 내에 선언 된 명명 된 함수포함 됩니다. 또한 함수의 인수를 포함합니다. 클로저는 클로저의 변수를 전역 범위까지 액세스 할 수 있습니다.
  • 클로저는 메모리를 사용하지만 자바 스크립트는 자체적으로 참조되지 않은 순환 구조를 정리하므로 메모리 누수가 발생하지 않습니다 . 클로저를 포함하는 Internet Explorer 메모리 누수는 클로저를 참조하는 DOM 특성 값의 연결이 끊어 질 때 만들어 지므로 순환 구조에 대한 참조가 유지됩니다.




javascript regex arrays passwords