Javascript 允许MM:SS,TH或SS,TH的正则表达式

Javascript 允许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]|

我正在尝试编写一个正则表达式,允许以分、秒、十分之一和百分之一的形式输入时间。 我的问题是,用户也应该被允许输入一个仅以秒&十分之一或秒、十分之一和百分之一百表示的时间。变化如下:

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-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+