2012-04-15 7 views
0

Ich schreibe ein Geburtstagsvalidierungsformular mit JavaScript, aber es funktioniert nicht richtig. Beispiel: 40/40/2012 ist ungültig, gibt jedoch keine Warnung aus.Wie funktioniert die Datumsvalidierung in JavaScript?

JavaScript

function onFormSubmit(form_element) { 

    var birthday = form_element.birthday.value; 
    if (!/\d{2}\/\d{2}\/\d{4}/.test(form_element.birthday.value)) 
    { 
     alert("This field is required. Please enter date mm/dd/yyyy!"); 
     return false; 
    } 
    return true; 
} 

HTML

<form onsubmit="return onFormSubmit(this)"> 
    Birthday:<input type="text" name="birthday" /><br /> 
    <input type="submit" value="submit" /> 
</form> 
+0

Sie könnten dies anpassen: http://StackOverflow.com/A/276511/525649 – Adam

+0

Dieser regelmäßige Ausdruck macht es ziemlich klar, warum Sie keine Warnung erhalten. Wenn Sie das nicht selbst geschrieben haben, finden Sie ein gutes Tutorial zu regulären Ausdrücken. – erturne

Antwort

2

Was ich tun möchte, ist dies:

var birthday = form_element.birthday.value; 
var match = /^(\d\d)\/(\d\d)\/(\d\d\d\d)$/.exec(birthday); 
if (!match || match.length < 4) return false; 

var d = new Date(match[3] - 0, (match[2] - 0) - 1, match[1] - 0); 
if (d.getFullYear() != match[3] || d.getMonth() + 1 != match[2] || d.getDate() != match[1]) 
    return false; 

return true; 

Wenn Sie ein Datum aus einem gültigen Jahr/Monat/Tag zu machen, und überprüfen Sie dann diese Werte auf dem Date-Objekt, Sie sollten die gleichen Werte zurück erhalten. Wenn Sie das nicht tun, bedeutet das, dass das Date-Objekt die falschen Werte so angepasst hat, dass sie ein gültiges Datum darstellen, was bedeutet, dass die gefälschten Werte, na ja, falsch waren.

bearbeiten — Entschuldigung mein Code ist für Tag/Monat/Jahr geschrieben; Wenn Sie Monat/Tag/Jahr wünschen, tauschen Sie match[2] und match[1] in obigem aus.

+0

Es gibt jetzt keine Warnung. – user1332075

+0

Nun, dann setze die Warnung zurück :-) Ich habe nur die 'true' /' false' return Statements eingefügt. – Pointy

+0

Vielen Dank. Das Problem ist behoben. – user1332075

Verwandte Themen