2012-04-16 56 views
3

我有一個輸入字段,用戶輸入格式爲mm:hh的時間。格式是在字段內指定的(默認值爲09:00),但我仍然想要執行客戶端檢查以查看格式是否正確。jQuery - 檢查適當的時間格式

由於現有的客戶端驗證是在jQuery中,所以我想保留在jQuery中。

我主要是一個PHP程序員,所以我需要一些幫助以最佳方式編寫這一個。

我知道我可以檢查每個單獨的字符(前兩位=數字,第三=':',後兩位=數字),但有沒有辦法更優雅地做到這一點,同時檢查小時數不大於23分鐘計數不大於59?

在PHP中,我會使用正則表達式,我假設有類似的jQuery?

像這樣的事情對我來說很有意義:

([01]?[0-9]|2[0-3]):[0-5][0-9] 

但我不是太熟悉jQuery的語法,所以我不知道該怎麼辦。

回答

8

您可以在JavaScript中使用正則表達式太:

http://www.w3schools.com/jsref/jsref_obj_string.asp

使用 .search() - http://www.w3schools.com/jsref/jsref_search.asp

或.match() - http://www.w3schools.com/jsref/jsref_match.asp

或.replace() - http://www.w3schools.com/jsref/jsref_replace.asp

編輯:

<script> 
    var regexp = /([01][0-9]|[02][0-3]):[0-5][0-9]/; 
    var correct = ($('input').val().search(regexp) >= 0) ? true : false; 
</script> 

EDIT2:

這裏regexpobject的JavaScript中的文檔:

http://www.w3schools.com/jsref/jsref_obj_regexp.asp

<script> 
    var regexp = /([01][0-9]|[02][0-3]):[0-5][0-9]/; 
    var correct = regexp.test($('input').val()); 
</script> 

EDIT3:

修復了正則表達式

+0

謝謝,這是有效的。只有一個問題,它允許任何兩位數字輸入爲「hh」。例如,它接受77:00作爲適當的時間。我看不出爲什麼它可能在查看正則表達式,對嗎? – jovan 2012-04-16 13:41:14

+0

嘗試使用'/([01] [0-9] | [02] [0-3]):[0-5] [0-9] /' – WolvDev 2012-04-16 16:58:13

+1

@robert它爲77返回true的原因:00'是因爲它匹配字符串的'7:00'部分。爲了強制整個字符串匹配,可以使用[anchors](http://www.regular-expressions.info/anchors.html),例如'^'(字符串的開頭)和'$'(字符串的結尾)例如'/ ^([01]?[0-9] | 2 [0-3]):[0-5] [0-9] $ /' - 這將無法匹配'77:00'一部分)。 – 2012-04-17 08:50:19

2

在JavaScript中,您可以使用yourstring.match(regexp)將字符串與正則表達式進行匹配。

我的RegEx體驗非常有限,所以我無法幫助您處理這種模式,但是如果您擁有那套.match()應該就足夠了。

4

在JavaScript中,正則表達式由/定界。所以你會這樣做...

var isValidTime = /([01]?[0-9]|2[0-3]):[0-5][0-9]/.test(inputString); 

你的正則表達式似乎有意義的驗證任何24H時間在HH:mm格式。不過,正如我在Andreas的回答下的評論所述 - 如果字符串的任何部分匹配,這將返回true。爲了驗證它的整個字符串,用錨字符串也如的開始和結束匹配...

var isValidTime = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(inputString); 

要真正拉你就需要使用string.match JS功能的匹配。

哦 - 請注意,jQuery Javascript - 它只是一個非常有用的東西庫!然而這個例子不包含對jQuery庫的引用。

1

一種不同的方法,但使用額外的JavaScript LIB,而不是正則表達式:

var valid = moment(timeStr, "HH:mm", true).isValid(); 

我想如果你已經在你的項目中使用moment.js,有百利而無一害。

而且由於您沒有特別要求使用正則表達式的答案,我認爲這是有道理的提及。