2012-04-08 10 views
0

Was Ich mag würde tun, ist eine strenge Suche nach den Monaten Januar Februar März April ... etc in ein Textfeld eingegeben wird formatiert alsstrenge Suche nach Zeichenfolge Monat in Javascript zu validieren

mmmyyyy (ex: jan1993).

Ich möchte dies validieren, so dass der Benutzer entweder alle Kleinbuchstaben oder alle Großbuchstaben eingeben kann (Jan/JAN).

was ich tat, scheint nicht zu funktionieren.

 var firstM =month.charAt(0,2); 
    var months = 
     { 
      "jan" : "JAN", 
      "feb" : "FEB", 
      "mar" : "MAR", 
      "apr" : "APR", 
      "may" : "MAY", 
      "jun" : "JUN", 
      "jul" : "JUL", 
      "aug" : "AUG", 
      "sep" : "SEP", 
      "oct" : "OCT", 
      "nov" : "NOV", 
      "dec" : "DEC" 
     }; 



else if (firstM !== months[firstM]) 
     { 
      errMessages += "<li class='b1'> Date of Birth must start with 3 letter month</li>\n"; 
      errMessages += "<li class='b2'> ex: mmmyyy/JAN1993</li>\n"; 
     } 

Ich bin noch immer Gebrauch zu herauszufinden, wie .charAt mit dem „Jan“ zu nutzen: „Jan“ Ich dachte, wenn ich es so tat, könnte der Benutzer Eingabe entweder alle Klein- oder Großbuchstaben und Es würde bestätigen, aber der Fehler kommt immer wieder auf, egal was ich mache.

Jede Hilfe wäre willkommen.

+1

Der Code irgendwie unvollständig ist ... Was bedeutet die 'else' gehören? – Imp

+1

Ich würde nur ein Array der Monate in Kleinbuchstaben machen und [.toLowerCase()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/toLowerCase) verwenden, um zu suchen und zu vergleichen. – j08691

+0

@Imp meine Entschuldigung theres Code dazwischen, dass ich zum leichteren Lesen für Sie heraus nahm, deshalb gibt es ein anderes wenn Und j08691 danke – Umeed

Antwort

1

Ohne reguläre Ausdrücke, kann die Funktion wie folgt aussehen:

function checkInput(input) { 
    var months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; 

    var monthPartOfInput = input.substring(0, 3).toLowerCase();       

    if (months.indexOf(monthPartOfInput) == -1){ 
     // TODO: Show validation error 
    } 
} 
+0

das ist die Schlussfolgerung, die ich kam, total vergessen, diese Seite zu aktualisieren. Danke Nick – Umeed

0

charAt() gibt ein Zeichen an bestimmten Position, nicht der Teil, ich bin nicht sicher, wie Sie die month aus, bekommen, aber wenn Sie die ersten 3 Zeichen nehmen mögen, verwenden substr

var firstM = month.substr(0, 3); 
1

Gemäß der Dokumentation nimmt charAt nur einen Parameter und gibt eine Zeichenfolge der Länge eins zurück. Was Sie suchen ist substring und toLowerCase

var month = "January", 
    check = month.toLowerCase().substring(0, 3); 

if(months[check]) { 
    //valid month 
} 

months[check] einen truthy Wert zurück, wenn die ersten drei Buchstaben etwas in Ihrem Objekt entsprechen.

+0

sollte ich das in ein Array, damit ich alle Monate einschließen? weil dem Benutzer nicht erlaubt sein sollte, etwas wie "FJR" zu setzen. – Umeed

+0

ok, also habe ich es ausprobiert ... es wird validiert, wenn ich Jan1993 eingebe, aber nicht, wenn ich Jan/JAN betrete ... was mache ich falsch? – Umeed

1

Um den Code zu vereinfachen, könnten Sie einen regulären Ausdruck verwenden?

function checkInput(input) { 
    var months = /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i; 

    if (months.test(input) == false) { 
    // TODO: Show validation error message 
    } 
} 
+0

leider kann ich keinen regulären Ausdruck verwenden sonst hätte das genau dort das Leben einfacher und sauberer gemacht lol. aber danke – Umeed

Verwandte Themen