2012-04-15 7 views
0

誕生日の検証フォームをJavaScriptで作成していますが、正しく動作しません。たとえば、40/40/2012は無効ですが、アラートは表示されません。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

これを適応させることができます:http://stackoverflow.com/a/276511/525649 – Adam

+0

この正規表現は、警告を受け取らない理由を明確にしています。自分で書いたことがない場合は、正規表現に関する良いチュートリアルを見つけてください。 – erturne

答えて

2

はこれです:あなたは有効な年/月/日から日付を作る場合

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; 

、およびDateオブジェクトのこれらの値をチェックすると、同じ値が返されます。そうでない場合は、Dateオブジェクトが偽の値を有効な日付に調整したことを意味します。つまり、偽の値はうそです。

編集 —私のコードは日/月/年のために書かれています。月/日/年が必要な場合は、上記のmatch[2]match[1]を交換してください。

+0

それは今、警告を出すものではありません。 – user1332075

+0

それから、警告を戻します:-)私は 'true' /' false' return文を追加しました。 – Pointy

+0

ありがとうございます。問題は解決された。 – user1332075