2012-10-14 4 views
5

다음은 문자 A-F 및 숫자 0-9로 구성된 35 자와 3 개의 대시 ("-")로 구성된 입력을 통해 제출 된 항목 코드를 확인합니다. 유효한 항목 코드의 예는이 될 것이다 : 16FA860F-E86A457B-A28A238B-2ACA6E3D길이가 널인 경우 조건을 전달해야 함

//Checks the item code to see if it meets requirements 
if($("#input").val().length > 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().length < 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too short. Be sure to include dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/([^A-Fa-f0-9-]+)/gm)) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> contains invalid characters.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else { 
//Rest of my code 
} 

에게 다음 작품 아니라, 아이템 코드는 길이 35 자입니다,하지만 대시가없는 경우를 제외하고. 1 또는 2 개의 대시가 포함되어 있으면이 코드가 캐치하지만 0이 포함되어 있으면 아무 것도 처리하지 않고 그냥 수행합니다. 나는 모든 것을 시도했지만 해결책이 무엇인지 파악할 수 없습니다. 길이가 null이기 때문에, 어떻게 든 쥐게한다 그것은 단지 hangs.The 부분은 이것이다 :

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

나는 해결책이 쉬운 확신 해요,하지만 난 난처한 상황에 빠진입니다.

편집 : 다음은 CSS를 제외하고 대부분 모든 부분을 배치 한 방법입니다. http://jsfiddle.net/86KcG/1/

+4

이 방법이 지나치게 복잡해 보입니다. 형식이 항상 같은가요? 즉, '-'는 항상 같은 위치에 있습니까? 하나의 정규 표현식이 작업을 수행 할 것입니다 ... –

+0

길이가 35 인 경우 어떤 상태로 시작해야합니까 ?? – charlietfl

+0

@ 마이클 예.하지만 좋을 지 몰라도, 지금 당장 확인하는 것이 너무 걱정되지 않습니다. 코드에 항상 세 개의 대시가 있는지 확인하는 데 초점을 맞추고, 그렇지 않은 경우 오류 메시지를 표시합니다.1 또는 2 만 있으면 작동하지만 아무 것도 없다면 아무 것도하지 않습니다. –

답변

1

당신은

/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/ 

^및 $ 제약으로 시작과 끝, 그리고 문자 AF의 그룹과 0-9 입력과 일치 대시에 같이 어떻게 든 정규식을 사용하여 코드를 수정할 수 있습니다 그룹 AF 또는 0-9 중 적어도 하나의 문자로 구분됩니다.

이 체크를 길이 검사와 결합하면 35 자로 코드가 작동합니다.

//Checks the item code to see if it meets requirements 
if($("#input").val().length != 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long/short.<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
else if(!(/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/.test($("#input").val()))) { 
    $("#errorLogContent").prepend("Insert some dashes and make sure the required pattern...<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
+0

이것이 나를 위해 가장 잘 된 것입니다. nnnnnn의 해결책은 나에게 오류를주고, 아마 내 잘못. 내가 nnnnnn의 정규식을 사용하여 결국 했지 만. –

0

.lengthnull이 아닙니다. 일치하지 않는 경우 match()에서 null이 반환됩니다. null에는 속성이 없으므로 length 속성을 확인하려고하면 오류가 발생하므로 테스트해야합니다 (단, length). 자체는 항상 0 또는 undefined의 정수입니다.

그래서 당신은 말할 수있다 : 당신 미만 3 시험의 경우

else { 
    var matches = $("#input").val().match(/[-]/g); // note: match() only takes one parameter 
    if (matches != null && matches.length > 3) { 
     $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

     $("#ise").each(function(){ 
      this.reset(); 
     }); 
    } 
} 

말 것 :

if (matches === null || matches.length < 3) 
이 ... 더 일치 ( null의 창)이없는 경우에 대한 수용 또는 일부 일치하지만 3 미만이지만 일치하지는 않습니다.

올바른 값은 항상 16FA860F-E86A457B-A28A238B-2ACA6E3D의 패턴 즉, 대시로 구분 된 8 자 또는 숫자의 그룹을 따르는 경우 수행 할 수 있습니다 이 :

if (!/^[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}$/i.test($("#input").val()) { 
    // invalid, do something... 
} 

true 또는 false 제공된 문자열이 일치하는지 여부에 따라 반환 .test() method 정규식.

관련 문제