时间输入的正则表达式

我可以从输入中收到以下类型的值:

1w 1d 1h 1m

或者

1n 1d 1h 1m

其中周 (w) 和天 (d) 选项是可选的,其余的是强制性的。我想出了以下正则表达式:

/^(([0-9][w,n])\s([0-9][d,d]))\s?([0-24][h,h])\s([0 -60][m,m])$/

但它不起作用。

我想我搞砸了可选部分,我也不太确定捕获组,所以这里的任何帮助将不胜感激。


繁星点点滴滴
浏览 138回答 3
3回答

莫回无

这有效:(?:\d[wн]\s)?(?:\d[dд]\s)?(:?\d{1,2}[hч])\s(:?\d{1,2}[mм])

千万里不及你

您错误地使用了正则表达式类运算符[..]。我看到你打算设置允许的范围,但这不是它的工作原理。您只能在此处设置允许的字符集。所以[0-9]简单地说,所有字符 0、1、2、3、4、5、6、7、8、9 都是允许的。其中有多少在后面指定,例如[0-9]+表示一个或多个。在你的情况下,我会说“一两个”是你想要的几分钟和几小时[0-9]{1,2}。以下正则表达式按预期工作:^(([0-9]+)[wн]\s([0-9]+)[dд]\s)?(([0-9]{1,2})[hч]\s)(([0-9]{1,2})[mм])$请注意,之后您必须以编程方式进行值验证(因此小时和分钟在正确的范围内)。

侃侃尔雅

尝试:/^(?:\d+[wн]\s+\d+[dд]\s+)?\d+[чh]\s+\d+[мm]$/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript