2012-04-16 23 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,有百利而无一害。

而且由于您没有特别要求使用正则表达式的答案,我认为这是有道理的提及。