2012-04-15 36 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 2012-04-15 13:04:33

+0

這個正則表達式很清楚爲什麼你沒有得到警報。如果你沒有自己寫,請在正則表達式中找到一個很好的教程。 – erturne 2012-04-15 13:09:52

回答

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 2012-04-15 13:21:55

+0

好了,然後把警報恢復在:-)我剛剛包括'true' /'false'返回語句。 – Pointy 2012-04-15 13:25:44

+0

非常感謝。問題已經解決了。 – user1332075 2012-04-15 13:39:39