Javascript 允许MM:SS,TH或SS,TH的正则表达式
我正在尝试编写一个正则表达式,允许以分、秒、十分之一和百分之一的形式输入时间。 我的问题是,用户也应该被允许输入一个仅以秒&十分之一或秒、十分之一和百分之一百表示的时间。变化如下: mm:ss:th m:ss:th mm:s:t 你明白了 下面允许ss:th | ss:t | s:th | s:tJavascript 允许MM:SS,TH或SS,TH的正则表达式,javascript,regex,Javascript,Regex,我正在尝试编写一个正则表达式,允许以分、秒、十分之一和百分之一的形式输入时间。 我的问题是,用户也应该被允许输入一个仅以秒&十分之一或秒、十分之一和百分之一百表示的时间。变化如下: mm:ss:th m:ss:th mm:s:t 你明白了 下面允许ss:th | ss:t | s:th | s:t ^([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])(\.\.\,)([0-9]|[0-9][0-9])$ 但是,只要我将分钟数添加到表达式中,验证就会失败: ^([0-9]|
^([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])(\.\.\,)([0-9]|[0-9][0-9])$
但是,只要我将分钟数添加到表达式中,验证就会失败:
^([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])(\.\.\.\,)([0-9]|[0-9][0-5][0-9]):([0-9]|[0-5][0-9]:([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]),[0-9](\.\.[0-9]),[0-9],[0-9]),[0-9]),[0-9],[0-9],[0-9])
最后,我还需要添加小时数,并允许用户输入秒数超过59的时间-例如67.32s,现在让我们坚持合法值(以后总是可以放宽要求),然后使用详细的正则表达式,希望您的正则表达式风格支持这些值:
^ # Start of string
(?: # Match the following non-capturing group:
( # Match (and capture into group 1):
\d{1,2} # one or two digits
) # End of group 1
: # Match a colon
)? # End of non-capturing group, make it optional.
( # Start of capturing group 2:
[0-5]? # Match a number between 0 and 5 (optional)
[0-9] # Match a number between 0 and 9 (required)
) # End of group 2
: # Match a colon
([0-9]) # Match and capture a number (0-9) in group 3
(?: # Match the following non-capturing group:
([0-9]) # Match and capture a number in group 4
)? # End of non-capturing group (optional)
$ # End of string
看到了
编辑:JavaScript不支持详细正则表达式,因此您需要:
/^(?:(\d{1,2}):)?([0-5]?[0-9]):([0-9])(?:([0-9]))?$/.test(subject)
如果主题
符合要求,则获得正确/错误答案。可能存在以下未说明的格式:)
成功和失败的原因如下:
9.45 - success
9 - success
4:6.65 - success
5:06.65 - success
5:6,65 - success
50:40 - success
50:40.65 - success
50:06.65 - success
50:06.6 - success
06.65 - success
6.65 - success
1:50:06.65 - success
19:50:06.65 - success
19:50:06.65 - success
69,45 - fail
69.45 - fail
19:60:06.65 - fail
19:50:96.65 - fail
我很快会打个解释
修订-基于OP的评论
^(?:\d+:)?(?:[0-5]\d:|[0-9]:)?(?:[0-5]\d|\d|^\d\d)(?:[.,]\d\d?)?$
以前的69,45 | 69.45
失败,现在匹配。我刚刚在秒部分添加了:
|^\d\d
当然,对于169,45它将失败,但只需将以前的添加更改为:
|^\d+
现在,它将匹配任何时间的秒数:)您需要分别捕获分、秒、十和百分之几吗?语言无关-我有(\.\124;,)处理十进制issue@CraigMorgan:他的意思是编程语言-不同语言的正则表达式功能差异很大。我需要允许几乎所有的时间变化,这些变化可以输入到运动会中。hh:mm:ss.th。示例-1:15:2.76或1:15:02,76或01:15:02,76。你可以暂时忽略小时数(hh),因为我想一旦描述中提到的问题解决了,就可以很容易地添加它们。语言-duh!我的错。JavascriptOK-这很有效。。。谢谢为了让我能够理解并扩展您的解决方案以包括小数和小时,请您解释一下这意味着什么-(?:#匹配以下非捕获组:@CraigMorgan:(?:)
与(…)相同
有一个区别:与组内容匹配的部分只会被记住,以供以后重用/提取。请参阅上的本教程。如果[0-9]
被\d
替换。感谢您的评论。我一直在尝试添加一个标准,但它不起作用。应该可以输入59.99秒以上的时间,但前提是不涉及小时。不允许输入1:66.34,但应该输入66.34。这是我尝试的:^(?(?:\d+:)?(?:[0-5]\d:|[0-9]:)(?:[0-5]\d |\d)(?:[,]\d\d?)|(?:\d\d[,]\d\d)?$
@CraigMorgan请检查修订的正则表达式
|^\d+