2013-04-02 50 views
0

我想用JavaScript來驗證一個簡單的日期,但是無論我輸入什麼日期都會出現錯誤..我確信我可能在做一些愚蠢的事情,但我找不到解決方案。我想在JavaScript中使用正則表達式驗證日期,但它不能正常工作?

<script type="text/javascript"> 
/* <![CDATA[ */ 
function validateDate(date) { 
var dateCheck = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/; 
    if (dateCheck.test(date) == false) { 
     window.alert("Please enter a correct date"); 
    } 
    else { 
    window.alert("The date was entered correctly!"); 
    } 
} 
/* ]]> */ 
</script> 


Please enter a date: 
input type='text' name='date' id='date'> 
input type='button' name="submitDate" id='submitDate' value='Submit' onclick="validateDate()"> 

回答

1

你的正則表達式似乎很好。 但是,您忘記了函數聲明中的參數date,這可能是問題所在。

function validateDate(date) { 
    ... 
} 

那好吧,我看到你編輯你的問題,我更好地理解。 當您將name屬性賦予輸入元素時,可以引用此元素。 因此,如果要使用名爲date的輸入值,則必須使用date.value

我做了的jsfiddle與您的代碼,並使用date.valuehttp://jsfiddle.net/BssTY/

+0

謝謝您指出這一點!不幸的是仍然無法找到我遇到的問題... –

+0

真棒謝謝你! –

-2

使用簡單的驗證是這樣的:

validformat=/^\d{2}\/\d{2}\/\d{4}$/ 
+0

猜OP不希望只是任意數量的... –

1

我已經測試了這個jsFiddle以及正則表達式本身rubular.com,兩者都與格式日期工作「XX-XX -xxxx」。當您嘗試使用諸如「xx-xx-xx」之類的格式時,它失敗。

示例代碼:

var dateCheck = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/; 

    if (dateCheck.test("02-03-2013") == false) { 
     window.alert("Please enter a correct date"); 
    } else { 
     window.alert("The date was entered correctly!"); 
    } 

究竟是什麼格式,你嘗試檢查?也許你想看看XDate,它提供了一個非常好的JavaScript庫來處理日期(如果日期有效,你可以使用.valid方法進行檢查)。

+0

對不起我剛纔已說過,這是從一個輸入文本框..我試圖實現的格式是xx-xx-xxxx或xx/xx/xxxx以及其他沒有全年的變化 –

0

還有更多的驗證日期不僅僅是檢查格式。 OP功能認爲「30-02-2013」​​正常。測試字符串的一種方法是創建一個日期對象並檢查原始對象,例如

// Format dd-mm-yyyy 
function validateDate(s) { 
    s = s.split('-'); 
    var d = new Date(s[2], --s[1], s[0]); 
    return !!d && d.getMonth() == s[1] && d.getDate() == s[0]; 
} 

validateDate('30-02-2013'); // false 
validateDate('29-02-2000'); // true 
1

您可以添加更多的細節,以進一步限制輸入:

^(([1-9]|[0][0-9]|[1-2][0-9]|[3][0-1])(\/|\-)([1-9]|[0][1-9]|[1][0-2])(\/|\-)([1-9]{1}[0-9]{3}|[0-9]{2}))$ 

http://rubular.com/r/uTJ55LKzMK

擊穿的正則表達式在月底前檢查

([1-9]|[0][0-9]|[1-2][0-9]|[3][0-1]) 

- Single digit, eg. 1 or 2 or 3 up to 9 
- OR, can be double digits leading with 0, eg. 01 or 02 or 03 up to 09 
- OR, can be double digits leading with 1 or 2, eg. 10 or 11 or 22 or 23 up to 29 
- OR, can be double digits leading with 3, eg. 30 or 31 

正則表達式檢查個月

([1-9]|[0][1-9]|[1][0-2]) 
- Single digit, eg. 1 or 2 or 3 up to 9 
- OR, can be double digits leading with 0, eg. 01 or 02 or 03 up to 09 
- OR, can be double digits leading with 1, eg. 10 or 11 or 12 

正則表達式,用於檢查

([1-9]{1}[0-9]{3}|[0-9]{2}) 
- Four digits leading with # in range [1-9], eg. 1001 or 1100, up to 9999 
- OR, can be double digits leading with # in range [0-9], eg. 00 or 01 up to 99