2012-10-14 3 views
5

Następująca kontrola polega na sprawdzeniu kodu produktu złożonego z 35 znaków składających się z liter A-F i cyfr 0-9, a także trzech kresek ("-"). Przykładem ważnego kodu poz byłoby to: 16FA860F-E86A457B-A28A238B-2ACA6E3DKonieczność przejścia warunku, jeśli długość jest zerowa

//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 
} 

Poniższe działa dobrze, z wyjątkiem jeśli kod pozycja to 35 znaków, ale nie zawiera żadnych kresek. Jeśli zawiera 1 lub 2 kreski, to ten kod go przechwytuje, ale jeśli zawiera 0, to po prostu się zawiesza i nic nie robi. Próbowałem prawie wszystkiego, ale nie mogę się zorientować, jakie może być rozwiązanie. Ponieważ długość jest null, to po prostu hangs.The część, która powinna być manipulowane jakoś to:

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(); 
    }); 
} 

Jestem pewien, że rozwiązanie jest łatwe, ale jestem zakłopotany.

EDYCJA: Oto jak mam wszystko rozmieszczone w większości, z wyjątkiem CSS. http://jsfiddle.net/86KcG/1/

+4

Wygląda na to, że komplikujesz to. Czy format jest zawsze taki sam? To znaczy, czy '-' zawsze znajduje się w tej samej pozycji? Jedno wyrażenie regularne wykona zadanie ... –

+0

który warunek powinien zostać włączony, jeśli długość wynosi 35? – charlietfl

+0

@Michael Tak, ale nie martwię się o to teraz, choć byłoby miło. Skupiam się na upewnieniu się, że zawsze są trzy kreski w kodzie, a jeśli nie, daj komunikat o błędzie.Działa, jeśli jest tylko 1 lub 2, ale jeśli ich nie ma, to nic nie robi. –

Odpowiedz

1

można naprawić swój kod za pomocą regex jakoś tak na

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

Gdzie^i $ dopasować wejście początek i koniec, a grupy znaków AF i 0-9 z ograniczeniem, że myślnik jest oddzielone co najmniej jednym znakiem grupy AF lub 0-9.

Połączenie tej kontroli z kontrolą długości dla 35 znaków powoduje, że kod działa.

//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

To jest najlepsze dla mnie. Rozwiązanie nnnnnn ciągle dawało mi błąd, prawdopodobnie moja wina. Chociaż skończyłem używając wyrażeń regularnych nnnnnn. –

0

.length nigdy nie będzie null. Zwrot z match() byłby null, gdyby nie było dopasowania, w takim przypadku pojawi się błąd, jeśli spróbujesz sprawdzić właściwość length, ponieważ null nie ma właściwości, więc musisz to sprawdzić (ale length sama będzie zawsze liczbą całkowitą od 0 do góry lub).

Więc można powiedzieć:

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(); 
     }); 
    } 
} 

Do testu mniej niż 3 chcesz powiedzieć:

if (matches === null || matches.length < 3) 

... aby zaspokoić gdy nie znaleziono żadnego meczu (powrót null) lub niektóre mecze, ale mniej niż 3.

Jeśli prawidłowa wartość zawsze następujący wzór 16FA860F-E86A457B-A28A238B-2ACA6E3D, czyli grupy 8 liter lub cyfr oddzielonych myślnikami, a następnie można zrobić to:

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

regex .test() method zwraca true lub false w zależności od tego, czy dostarczony ciąg dopasowane.