2014-12-01 4 views
-1

나는 왜 이렇게되지 않을지 모른다고 생각합니다.정규 표현식이 유효한 표현식의 유효성을 검사하지 않는 이유는 무엇입니까?

정규 표현식 2 개 정규 표현식 웹 사이트에서 검증되었습니다
var str1 = "AAbb123."; 
var str2 = "ell"; 
var re = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$"); 
if(str1.match(re)){ 
    alert("matched") 
    } 
     else { 
     alert("doesnt match") 
     } 

(regexpal.com & : 여기

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|`¬':;~{}<>()#[email protected]$%^&*-]).{8,20}$ 

단순히 그것을 테스트하는 몇 가지 코드 : 여기

내 정규식 http://www.freeformatter.com/regex-tester.html). 둘 다 str1이이 표현식에 대해 유효하지만 내 코드에 포함되면 작동하지 않는다고 말합니다.

아래 코드는 작동시키려는 또 다른 곳입니다. 그리고 그것은 인쇄를 계속합니다 : 요구 사항이 충족되지 않았습니다.

var uname = document.getElementById("pword1").value; 
var re = new RegExp ("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$"); 
if(uname.match(re)){ 
     DIMR = "Requirements MET"; 

    }else { 
     DIMR = "Requirements NOT MET"; 


    } 
+0

아! 나는 자바 스크립트 채팅에 대해 논의 중입니다. 간체 http://jsfiddle.net/j5sxkun3/1/ –

+0

설명 : document.getElementById ("pword1")? 일부 HTML을 붙여주세요. – enguerranws

답변

2

new RegExp 생성자를 사용할 때는 문자열을 올바르게 이스케이프 처리해야합니다.

당신이 당신의 패턴 내부에 변수가 충분히 될 것 문자 클래스 내부에 존재 단지 몇 글자를 이스케이프

var str1 = "AAbb123."; 
var str2 = "ell"; 
var re = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\+\=\.\[\]_£|\`¬':\;\~{}<>()#?!\@$\%^&*-]).{8,20}$/; 
if(str1.match(re)){ 
    alert("matched") 
    } 
     else { 
     alert("doesnt match") 
     } 
+0

실제로이 정규식 리터럴이이 작업에 더 적합합니다. 당신을위한 포인트! –

+0

작동합니다. 환상적. 매우 감사합니다. – BlueShark

1

시도하지 않기 때문에. 정규식 구분 기호로 "을 사용하는 경우 정규식에서 백 슬래시를 한 번 더 이스케이프해야합니다.

var re = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[\\\\+=.\\[\\]_£|`¬':;~{}<>()#[email protected]$%^&*-]).{8,20}$"); 

특수 문자와 일치해야합니다 것입니다 문자 클래스 내부 +, ., * 같은 문자 + 또는 . 또는 *, 당신이 그것을 벗어날 필요가 없습니다. 리터럴 \과 일치 시키려면 \을 정확히 3 번 이스케이프 처리해야합니다.

+0

설명해주세요. –

관련 문제