我可以从输入中收到以下类型的值: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])$/但它不起作用。我想我搞砸了可选部分,我也不太确定捕获组,所以这里的任何帮助将不胜感激。
3 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
您错误地使用了正则表达式类运算符[..]
。我看到你打算设置允许的范围,但这不是它的工作原理。您只能在此处设置允许的字符集。所以[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м])$
请注意,之后您必须以编程方式进行值验证(因此小时和分钟在正确的范围内)。
添加回答
举报
0/150
提交
取消