2012-06-06 63 views
1

好吧,我在表單中輸入了一個日期輸入。我希望它接受基於像「XX/XX/XXXX」這樣的模式的字符。目前它只接受數字和「/」。但我不希望用戶輸入像「X/XXXX/XX」或其他類型的日期,我不想像「// XX/XXX/XXX」那樣寫錯。我不知道如何在這一個上使用js,或者jQuery,所以用戶根據模式輸入日期,而不是以其他方式輸入。JavaScript/jQuery input [type = text] pattern

+0

對於屏蔽輸入,請記住,你要能夠接受部分有效輸入,以及。你不應該阻止'XX/X/XXXX',因爲那樣你會阻止用戶糾正一個錯字 - 這是非常令人沮喪的。你想要做的是通過屏蔽拒絕明顯無效的輸入(例如你的案例中的字母字符),然後檢查當輸入字段失去焦點或表單被提交時最終輸入是否無效。 (同樣令人沮喪的是:阻止用戶退出無效字段。) – millimoose

+0

尚未得到廣泛支持,但HTML5的''具有適當的UI。 – pimvdb

回答

1

也許你可以看看meiomask jQuery插件這是一個最好的,以用於應用模式的輸入,並添加automaticaly了「/」的日期。

3

廉價和簡單的方法可能只是實施jQuery UI datepicker控制,以便您可以通過它來控制輸入格式。

它基本上是一步步解決問題,但可能會將實際問題排除在等式之外。

0

使用正則表達式^(3[0-1]|[0-2]?[0-9])\/(0?[0-9]|1[0-2])\/(2[0-9]+)$

var date = "20/12/2012"; 

console.log(isDateOK(date)); 

function isDateOK(date) { 
    return date.match(/^(3[0-1]|[0-2]?[0-9])\/(0?[0-9]|1[0-2])\/([1-2][0-9]{3})$/); 
} 

它將返回false,如果它不匹配。本例使用DD/MM/YYYY。如果你想MM/DD/YYYY,使用下面的正則表達式來代替:^(0?[0-9]|1[0-2])\/(3[0-1]|[0-2]?[0-9])\/[1-2][0-9]{3$

的jsfiddle:http://jsfiddle.net/UBFeN/2/

+0

那不是隻接受以2開頭的年份嗎? – Arth

+0

是的,但它很簡單,就是增加輸入安全性,所以你可以確定他們輸入的內容是正確的。當然你會遇到3000年的錯誤,但如果有人仍然在使用這個JS,我相信他們會弄明白。當然,如果你想在3K之前使用它,'2 [0-9] {3}'應該與'[0-9] {4}'交換。 – h2ooooooo

+1

哈哈我更關心2000年以前的日期,而不是3000年後的日期。哦,並且在使用js驗證時沒有輸入安全性。我更喜歡使用庫或Date類/類型構造函數來驗證客戶端和服務器端。 – Arth

相關問題