Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于JavaScript中灵活时间验证的正则表达式_Javascript_Regex - Fatal编程技术网

用于JavaScript中灵活时间验证的正则表达式

用于JavaScript中灵活时间验证的正则表达式,javascript,regex,Javascript,Regex,我从一个用于时间验证的正则表达式开始, 它应该检测如下字符串: 5s 3h5m 5h3m02s 05:03:02 05:03 4 我当前的正则表达式对所有这些都有效,但只有一个:05:03。它将05检测为小时,将03检测为秒,但应将05检测为分钟。。。我不知道如何编辑我的代码来做到这一点 var reTime = /^(?:PT)?(?:(\d{1,2})[:.hH])?(?:(\d{1,4})[:.mM])?(?:(\d{1,6})[sS]?)?$/; 测试这个: var hasTim

我从一个用于时间验证的正则表达式开始, 它应该检测如下字符串:

5s
3h5m
5h3m02s
05:03:02
05:03
4
我当前的正则表达式对所有这些都有效,但只有一个:05:03。它将05检测为小时,将03检测为秒,但应将05检测为分钟。。。我不知道如何编辑我的代码来做到这一点

 var reTime =
 /^(?:PT)?(?:(\d{1,2})[:.hH])?(?:(\d{1,4})[:.mM])?(?:(\d{1,6})[sS]?)?$/;
测试这个:

var hasTimeFormat = function (input) {
        var timeFormat = /([0-9]{2})\:([0-9]{2})\:([0-9]{2})\,([0-9]{3})$/;
        if (typeof String.prototype.trim !== 'function') {
            String.prototype.trim = function () {
                return input.replace(/^\s+|\s+$/g, '');
            }
        }
        return timeFormat.test(input.trim());
    }

这很有效(例如“05:03:02677”),如果您想添加更多内容,可以轻松添加。

您真的需要使用单个正则表达式吗?使用一个用于“标记”版本(
3h5m
等)和一个用于位置版本(
05:03
等)将更易于阅读和维护。此问题(验证时间输入)有很多方面,可能会出现可怕的错误。例如,你听说过吗?是的,没错,在某些情况下你可以有61秒。非常重要的是,你要清楚地定义,在什么条件下使用正则表达式,以及预期的结果是什么。@Boldewyn我从来没有听说过闰秒,我很好奇在什么情况下我会遇到这种状态。请你详细说明一下好吗?再想想,谷歌是我的朋友。LolI还链接到上面的维基百科文章。Tl;dr:这是一种将地球绕太阳运行的轨道有点不规则所造成的时间差降到最小的方法。乍一看,我不知道这是如何处理所有测试用例的。我承认我不太擅长正则表达式,但我就是不明白it@user3054287那…完全错了。那个逗号在那里干什么?这应该如何匹配
5h3m02s
?你为什么要逃避冒号和逗号?!