繁体   English   中英

正则表达式验证逗号分隔的年份范围

[英]Regex to validate comma separated year range

我想出了这个正则表达式:

(?:[0-9]{4}-([0-9]{4}|[?]))+

对于此文本:

1993-2000,2004-?

要捕获的正则表达式= [0-9]{4}-([0-9]{4}|[?])

我有类似的变化:

1993-?
1993-2000
1993-2000,2004-?
1993-2000,2004-2010

等等。

我的正则表达式捕获[1993-2000][2004-?] ,但不捕获逗号。

我发现很难声明逗号对于第二个,第三个等事件应该是强制性的。

因此,不应允许的是:

1993-2000,
1993-20002007-?
?-2000

可能将其允许为0: 1993-2000,2004,2007,2010-?

有人可以帮助我获得关于第二次和后续事件的条件逗号的最后理解吗?

我找到了这个正则表达式,我做了一点修改:

^([0-9]{4}(-([0-9]{4}|[?]))?)(,([0-9]{4}(-([0-9]{4}|[?]))?))*$

似乎可以解决问题,但这是最好的版本吗?

您的正则表达式(最后一个)看起来足够好。 关于过度拒绝或过度接受应该没有问题。 但是,有2个不必要的分组:

^[0-9]{4}(-([0-9]{4}|[?]))?(,[0-9]{4}(-([0-9]{4}|[?]))?)*$

您可以使所有组都不被捕获,因为您正在验证并且不会捕获任何文本:

^[0-9]{4}(?:-(?:[0-9]{4}|[?]))?(?:,[0-9]{4}(?:-(?:[0-9]{4}|[?]))?)*$

可以使用\\d代替[0-9] ,但是我认为明确声明它并不有害。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM