我有一个基于时间的正则表达式,可成功验证分钟和秒:
validates_format_of :duration, with: /\A(?!00:00)[0-5][0-9]:[0-5][0-9]\Z/
我遇到的问题是如果输入字符串2:30
,我会收到验证错误。相反,它需要像02:30
这样的东西。我的第一个猜测是插入一个两位数的可选项,例如d{1,2}
,但我不知道如何将这样的内容与我现在的负面预测相结合。
答案 0 :(得分:0)
将正则表达式更改为以下内容,这使得第一个数字可选:
/\A(?!00:00)[0-5]?[0-9]:[0-5][0-9]\Z/
在初始?
匹配器之后添加[0-5]
将允许它具有1或0个匹配。这样,您就不会被要求拥有前导零。
如果您不希望前导零有效(因此需要2:30而不允许02),您可以更进一步将范围从[0-5]
更改为[1-5]
: 30):
/\A(?!00:00)[1-5]?[0-9]:[0-5][0-9]\Z/