3

我有一个输入字段,用户在其中输入格式 mm:hh 的时间。格式在字段内指定(默认值 09:00),但我仍想执行客户端检查以查看格式是否正确。

由于现有的客户端验证在 jQuery 中,我也想在 jQuery 中保留它。

我主要是一名 PHP 程序员,所以我需要一些帮助以最佳方式编写这个。

我知道我可以检查每个单独的字符(前两个 = 数字,第三个 = ':',最后两个 = 数字)但是有没有办法更优雅地做到这一点,同时检查小时数不大于 23 和分钟计数不大于 59?

在 PHP 中我会使用正则表达式,我假设 jQuery 有类似的东西?

这样的事情对我来说很有意义:

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

但我对 jQuery 语法不太熟悉,所以我不确定如何处理它。

4

4 回答 4

10

你也可以在 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>

编辑2:

这里是 javascript 中 regexpobject 的文档:

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>

编辑3:

修复了正则表达式

于 2012-04-16T11:59:59.123 回答
4

在 JavaScript 中,正则表达式由 . 分隔/。所以你会做...

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

您的正则表达式似乎对以 HH:mm 格式验证任何 24H 时间有意义。但是,正如我在 Andreas 的回答下的评论中所说的那样 - 如果字符串的任何部分匹配,这将返回 true。要使其验证整个字符串,请使用锚点来匹配字符串的开头和结尾,例如...

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

要实际拉取匹配项,您需要使用string.matchJS 函数。

哦 - 请注意 jQueryJavascript - 它只是一个非常有用的库!但是,此示例不包含对 jQuery 库的引用。

于 2012-04-16T12:03:00.327 回答
2

在 JavaScript 中,您可以使用yourstring.match(regexp)正则表达式匹配字符串。

我的正则表达式经验非常有限,所以我无法帮助你解决这个问题,但如果你有那一套.match(),就足够了。

于 2012-04-16T12:00:34.620 回答
1

一种不同的方法,但使用额外的 javascript 库而不是正则表达式:

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

我想如果你已经在你的项目中使用了 moment.js,那就没有缺点了。

而且由于您没有专门使用正则表达式请求答案,我认为值得一提。

于 2016-11-02T21:20:28.357 回答