2013-05-17 2 views
0

현재 자바 스크립트 패스워드 제어를하고 있는데, 패스워드 요구 사항에 대해 패스워드가 갖는 모든 불일치에 대해 경고를 해줘야한다.자바 정규식 패스워드 검증 문제

나는 노력해 왔지만 해결책을 찾지 못했습니다.

그래서 여기에 코드입니다 :

function checkForm(form) 
    { 

    var re = /^\w{6,10}$/; 

    if(!re.test(form.pwd1.value)) { 
     alert("Password in-between 6-10 characters"); 
     form.inputfield.focus(); 
     return false; 
    } 

    var re = /^[\w ]+$/; 

    if(!re.test(form.pwd1.value)) { 
     alert("You need to write something"); 
     form.inputfield.focus(); 
     return false; 
    } 

    var re = /^(?=.*[A-Z])\w{2,}$/; 

    if(!re.test(form.pwd1.value)) { 
     alert("At least two Upper case"); 
     form.inputfield.focus(); 
     return false; 
    } 


    var re = /^(?=.*[a-z])\w{2,}$/; 

    if(!re.test(form.pwd1.value)) { 
     alert(" At least two Lower Case letters"); 
     form.inputfield.focus(); 
     return false; 
    } 

    var re = /^(?=.*\d)\w{2,}$/; 

    if(!re.test(form.pwd1.value)) { 
     alert("At least two numbers"); 
     form.inputfield.focus(); 
     return false; 
    } 

    // validation was successful 
    else(alert("Welcome!")); 
    return true; 
    } 

내 문제는 컨트롤러가 그러나 그것은 입력 값 예 중 하나 이상이 당신을 필요로 한 각각의 문자 대신 2로 정착한다는 것입니다. 2x 대문자, 2x 소문자 또는 2x 숫자 그것은 6자를 필요로 할 때 불가능하지 않습니다. 그리고 그것은 가장 이상한 것입니다. 표현이 실제로 작동합니다!

아무도 입력하지 않았다면 정말 고맙겠습니다. 감사합니다.

+10

짧은 암호를 사용하는 사용자를 강제하지 마십시오

동일한 개념

은 두 심볼을 필요로하는 다른 패턴에 적용 할 수 있습니다. – SLaks

+1

정확한 요구 사항을 알려주십시오. 첫 번째 케이스로 모든 케이스를 다룰 때 왜 그렇게 많은 수표를 만들어야하는지 모르겠습니다. – gkalpak

+2

정확히 무엇이 문제입니까? 어떤 규칙이 올바르지 않게 규칙을 유발하고 있습니까? –

답변

0

대문자, 2 자 및 2 자 패턴이 잘못되었습니다. 이 short demo를 참조

var re = /^.*([A-Z].*){2,}$/; 
var re = /^.*([a-z].*){2,}$/; 
var re = /^.*([0-9].*){2,}$/; 

: 당신은 같은 것을 사용한다.

편집 :
이 있다는 점 유의 하시길 바랍니다는 : \w를 사용하여

  • 당신은 문자, 숫자 및 밑줄 (추가 정보를 here)에 유효한 암호 문자를 제한합니다.
  • 사양에 따르면 2 개의 상단 또는 2 개의 하단 또는 2 개의 숫자가 필요합니다. 즉, 사용자에게 경고 할 수 없습니다. 중 하나를 확인합니다. 다음 번에 성공할 수 있기 때문입니다. 세 가지 검사가 모두 실패하면 세 가지 검사를 모두하고 사용자에게 경고해야합니다. 사용자가 함유하는 6-10 문자 암호 들어가면
  • \w 문자 (예 : "abCD56-"), 그의 비밀 인 반면, "암호 6-10 자 여야한다"라는 경고 할 것이다 6-10 자 (원하는 문자가 아님)이므로이 경우 메시지가 오도 된 것입니다.

도움이 되었기를 바랍니다.

var re = /^(?=.*\d)\w{2,}$/; 

룩어, (?=.*\d)이 문자열의 모든 문자를 소비하지 않습니다

+0

정규식은 불필요하게 복잡합니다. '/ [A-Z]. *? [A-Z] /'와 비슷하다. –

+0

그래서 나는 점을 그리워 했니? 얼마나 편리한 지. 어쨌든, 당신을 많이 사랑하고 이것으로 나를 도와 주셔서 감사합니다. 내 문제가 해결되었습니다. 건배! – Holmberg

+0

@ user2395622 : 도움이 될만한 정보/고려 사항으로 답변을 업데이트했습니다. BTW, 당신은 ... 점을 놓치지 않았습니다. 당신은 (당신의 목적에 전혀 도움이되지 않는) 확실한 미리보기를 사용하고 있습니다. 언제나 기꺼이 도와 드리겠습니다. D – gkalpak

0

우선, 매번 경고 상자를받는 것이 성가시다. 그러나 원하는 것이면 상단 및 하단 수표 패턴을 변경하십시오.

^.*[A-Z]{2,}.*$ 
^.*[0-9]{2,}.*$ 
^.*[a-z]{2,}.*$ 
+0

내가 너를 확신 할 수 있다면, 내가 스스로 결정하면 그렇게하지 않을 것이다. 그것은 대학의 원거리 수업을위한 것이며, 정보를 스스로 찾아서 (이상하게 보입니다), 자바 스크립트 부분에 도달 할 때까지 아무런 문제가 없었습니다. 아무튼 감사 해요! – Holmberg

0

있는 A 가능성이 의도 한 것과 다른 무언가를 당신이 당신의 코드에서 사용하는 패턴이있다. 앵커 시점에서 패턴 .*\d과 일치하는 것으로 보입니다. 문자 앞에 자 중 하나가있는 경우 (즉 임의의 문자 수 뒤에 숫자가있는 경우) 미리보기는 성공한 일치를 반환합니다.

개념적으로 lookahead가 true를 반환하면 파서는 \w{2,}$과 일치하려고 시도합니다.이 단어는 임의의 수의 단어 문자 (문자, 숫자 및 _)와 그 뒤에 문자열의 끝과 일치합니다.

결과적으로 패턴은 의도 한 2 개가 아닌 자를 포함하는 2 개 이상의 단어 문자로 구성된 문자열과 일치합니다.

수정 사항으로 몇 가지 옵션이 있습니다. 첫 번째 패턴이 암호는 적당한 길이가 보장하기 때문에, 당신은이 표현 대체 할 수있다 : 다른 숫자 뒤에 문자의 순서 다음에 자리를 찾을 수

var re = /\d.*\d/; 

이를합니다 (^의 제거에주의 $ 앵커. 첫 번째 숫자는 문자열의 어느 위치에서나 발생할 수 있기 때문에).

var re = /^(?=.*[A-Z])\w{2,}$/; becomes var re = /[A-Z].*[A-Z]/; 
var re = /^(?=.*[a-z])\w{2,}$/; becomes var re = /[a-z].*[a-z]/; 
+0

고마워요! 나는 내일 조금 더 잤을 때 그것을 다시 읽을 것이다! – Holmberg