2012-04-17 52 views
2

我有一個HTML表單字段,人們可以輸入日期編碼爲這樣:Javascript dd/mm/yyyy日期檢查?

input type="text" name="dateofbirth" placeholder="dd/mm/yyyy" 

我試圖找到一個JavaScript來檢查日期是在dd/mm/yyyy格式(所以10個字符輸入, 2/2/4)

任何意見,將不勝感激。只有第一次做JavaScript,並一直做得很好,直到這個呃逆。

編輯:代碼(窗體名稱是「註冊)

// JavaScript Document 
function validateForm(signup) { 
    { 
    var x = document.forms["signup"]["dateofbirth"].value; 
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/; 
    if (x.match(reg)) { 
     return true; 
    } 
    else { 
     alert("Please enter dd/mm/yyyy"); 
     return false; 
    }   
    } 
} 
+6

我不意味着冒犯,但我不認爲使用谷歌搜索腳本來使用計數作爲「做JavaScript」:-)發佈你嘗試過的東西和你的HTML會給人們一個開始的地方。 – Pointy 2012-04-17 15:46:19

+1

有一百萬種可能的方法 - 具體幫助! (有多少個可能的日期字段?在提交時或用戶輸入文本時進行驗證?當它不是有效的輸入時,行爲是什麼?) – Snuffleupagus 2012-04-17 15:50:10

+0

@Pointy:好吧,我只是一名學生,教科書不是有用,所以谷歌是第二選擇。我幾乎嘗試了幾乎所有不使用任何外部庫,數組,php,.ASAP或jQuery等的腳本。我只能使用javascript。沒有任何工作。 – silentauror 2012-04-17 15:52:50

回答

0

過目MDN guide for regular expressions。您將需要符合數字的字符類的信息 - 搜索「匹配數字字符」短語;以及指定匹配精確長度的方法 - 在本指南中搜索「匹配n個前面的字符出現次數」短語。

0

你看過Moment.js JavaScript庫嗎?

http://momentjs.com/

我還沒有使用它,但我計劃我的Javascript代碼遷移到它。

+0

不幸地不能使用外部庫。 – silentauror 2012-04-17 15:58:02

1

您可以使用正則表達式通過JavaScript驗證您提供的格式的日期。示例代碼如下所示。

function(input){ 
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/; 
    if (input.match(reg)) { 
    alert("Input matched"); 
    else { 
    alert("Please enter dd/mm/yyyy"); 
    } 
} 
+0

我相信這應該是工作,它看起來不錯,但我用它,仍然不工作。太令人沮喪了。 – silentauror 2012-04-17 16:11:54

+0

你傳遞哪種類型的輸入。我測試了你的模式 – irfanmcsd 2012-04-17 16:16:57

+0

注意的是,雖然這個表達式做出嘗試,以確保有效的日期,它不會(尤其是周圍的閏年)上http://gskinner.com/RegExr/及其工作正則表達式。鑑於此,爲什麼不去'/ \ d {1,2}/\ d {1,2}/\ d {4}'? – Phrogz 2012-04-17 16:20:15

1

最好的JavaScript最新的圖書館,我發現在http://code.google.com/p/datejs/

它也是文化的瞭解date.js,所以驗證您的DD/MM/YYYY日期(我假設你是不是設在USA),使用Date.parse如下

var d1 = Date.parse("01/12/2004"); // returns a valid JavaScript date 
var d2 = Date.parse("30/02/2004"); // returns null 
+0

嗨。如果我可以使用外部庫,這將是非常好的,我不能用於這個項目。 – silentauror 2012-04-17 16:20:20

+0

@silentauror ....所以也許看看圖書館內部,看看它是如何做到的? – Matt 2012-04-17 16:33:59

+0

@Matt好主意:)我會看看它 – silentauror 2012-04-17 16:39:18

0

你有沒有在你的網頁瀏覽器,以確保沒有JS語法或運行時錯誤的錯誤控制檯看上去被提出?你附加到你的問題的JavaScript代碼是 無效 令人驚訝(你有一個額外的{}包裝你的功能正文)。提示:使用正則表達式測試字符串的有效性時,爲了簡化和性能以及自記錄,您應該使用if (regex.test(str))而不是if (str.match(regex))

考慮你的要求,我會做到這一點:

function isDDMMYYYY(str){ 
    return /^\d{2}/\d{2}/\d{4}$/.test(str); 
} 

不過,我會親自更改的要求,以允許用戶輸入一個數字的日和月:

return /^\d{1,2}/\d{1,2}/\d{4}$/.test(str); 
+0

對不起,我真的很新手到JavaScript的...這裏我會實現這個: 回報/^\d{2}/\d{2}/\d{4}$/.test(str); ?? – silentauror 2012-04-17 16:37:47

+0

@silentauror如果你不想像我做的那樣把它包裝起來(在第一個代碼示例中;第二個只是我不重複自己),那麼你可以使用'var isValidLookingDate = /.../.test (str);' – Phrogz 2012-04-17 16:46:19

+0

是這樣的? var x = document.forms [「signup」] [「dateofbirth」]。value; \t VAR的isValid = /^\d{1,2}/\d{1,2}/\d{4}$/.test(x); \t if(isvalid.match(x)){ return true; } 其他{ 警報( 「請輸入日/月/年」); 返回false; }' 得到一個語法錯誤,它不工作..現在我只是混淆了我自己。這太令人沮喪了。 (ps。無法在評論中獲得空格,但它的空格和縮進格式正確) – silentauror 2012-04-17 16:52:36