2013-05-28 4 views
1

아래 코드에서 첫 번째 validationPattern으로 messageText의 유효성을 검사하고 validationPatterns 배열에서 해당 메시지를 표시하려고합니다. 패턴과 메시지는 파이프 "|"로 구분됩니다. 캐릭터.정규 표현식 javascript가 예상치 못한 결과를 반환했습니다.

다음 코드를 사용하고 있으며 항상 잘못된 결과가 표시됩니다. 어떤 사람이 이것을보고 나를 도울 수 있습니까?

var messageText = "Message1234"; 
var validationPatterns = [ 
    ['\/^.{6,7}$/|message one'], 
    ['\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|message two'] 
]; 
for (var i = 0; i < validationPatterns.length; i++) { 
    var validationvalues = validationPatterns[i].toString(); 

    var expr = validationvalues.split("|")[0]; 
    console.log(expr.constructor); 

    if(expr.test(messageText)) { 
     console.log("yes"); 
    } else { 
     console.log("no"); 
    } 
} 

저는 파이프가 정규 표현식의 일부이기 때문에 구분 기호로 파이프를 사용할 수 없다는 것을 알고 있습니다. 그러나 나는 나중에 그것을 바꿀 것이다.

+1

* 예기치 않은 결과 *는 무엇을 의미합니까? 당신은 무엇을 얻고 당신은 무엇을 기대합니까? 귀하의 코드를 실행하려고하면 런타임 오류가 발생합니다 :'TypeError : Object/^. {6,7}$/}에는 'test'가 없습니다. 두 개의 값을'|'로 구분하여 문자열을 사용하는 대신 배열을 사용합니다. –

답변

2

유효성 검사 패턴은 문자열입니다. 즉, 다음과 같습니다.

  • 백 슬래시는 다음 문자를 문자열 이스케이프 처리하므로 먹을 수 있습니다. "\b""b"과 같습니다. 두 번 이스케이프 처리해야합니다. "\\b"
  • test 메서드는 호출 할 수 없습니다. 그 중 RegExp objects을 구성해야합니다.

이 문제를 해결하는 것이 가능하지만 방금 정규 표현식 리터럴을 사용하여 개체 (또는 배열)의 고유 한 속성으로 메시지에서 구분하는 것이 좋습니다.

var inputText = "Message1234"; 
var validationPatterns = [ 
    [/^.{6,7}$/, 'message one'], 
    [/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/, 'message two'] 
]; 
for (var i = 0; i < validationPatterns.length; i++) { 
    var expr = validationPatterns[i][0], 
     message = validationPatterns[i][1]; 
    console.log(expr.constructor); // RegExp now, not String 

    if(expr.test(inputText)) { 
     console.log(message+": yes"); 
    } else { 
     console.log(message+": no"); 
    } 
} 
+0

내 문제가 해결되었습니다. 2D 배열을 사용하지 않았다 : ( – rajmalhotraml

+0

@rajmalhotraml : 사실, 이미 그랬다. 오직 하나의 문자열 만 내부에 들어 있었다. – Bergi

+0

@rajmalhotraml 오류는 매우 명백했다! 그리고 왜 오류 메시지를 사용하고 있는가? 표현식과 함께 i 값을 사용하여 오류 메시지를 추측하는 데 사용할 수 있습니다. –

1

expr 변수는 여전히 문자열입니다 (validationvalues.split("|")[0]은 문자열을 반환합니다). 이것이 정규 표현식으로 작동하지 않는 이유입니다.

expr의 초기 정의 이후에 줄을 추가해야합니다.

'i'는 대/소문자를 구분하지 않는 플래그 또는 다른 플래그를 사용하는 방법의 예입니다. 대/소문자를 구분하여 검색하려면 빈 문자열을 사용하십시오 (기본값).

또한 첫 번째 패턴을 둘러싼 //을 추출해야합니다. JavaScript 코드에서 정규 표현식 리터럴을 사용할 때만 필요하며 문자열을 정규 표현식으로 변환 할 때 필요하지 않습니다.

+0

해답을 가져 주셔서 감사합니다. 나는이 문제를 시도했지만 여러 번 반복 한 후에 해결하지 못했다. 이 줄을 사용할 때 messageText 변수에 몇 개의 문자가 있더라도 결과는 "no"입니다. – rajmalhotraml

+0

이전 답을 통해이 문제를 해결하십시오. – rajmalhotraml

관련 문제