需求:编写可匹配全部指定时段格式的正则表达式(RegExp)
精准匹配指定时段格式的正则表达式
需要精准匹配以下所有时段格式,且仅匹配这些格式:
07:00 - 15:30 16:00 bis 20:30 7:00-15:00 7.00 Uhr 16.30 Uhr 7 - 16.30 Uhr 7 - 16 Uhr 7:30 - 16 Uhr 7:15 Uhr bis 16:30 Uhr 7-16.15 Uhr
你当前使用的正则表达式存在问题:
([0-9] | [01]? [0-9] | 2 [0-3]) ((: |. |.) ([0-5] [0-9])?) ( . *?) ([0-9] | [01]? [0-9] | 2 [0-3]) ((: |. |.) ([0-5] [0-9])?)
它会错误匹配7:00-15、7.00 Uhr 16这类不完整格式,达不到精准匹配的需求。
修正后的正则表达式
^(?:(?:[01]?\d|2[0-3])(?:[:.]\d{2})?)(?:\s*(?:-|bis)\s*|\s+Uhr\s+(?:bis\s+)?)((?:[01]?\d|2[0-3])(?:[:.]\d{2})?)\s*Uhr?$
正则逻辑说明
^和$:锁定整个字符串,避免仅匹配部分内容(?:[01]?\d|2[0-3]):匹配0-23范围内的小时数,支持1位或2位数字格式(?:[:.]\d{2})?:可选的分钟部分,必须是:或.后跟两位数字(00-59),要么完整出现,要么完全省略,杜绝半完整格式(?:\s*(?:-|bis)\s*|\s+Uhr\s+(?:bis\s+)?):处理时间间隔的分隔符,覆盖三种场景:- 带或不带空格的
- - 前后可带空格的
bis - 前时间后接
Uhr,再可选bis连接后时间
- 带或不带空格的
\s*Uhr?$:允许后时间末尾带Uhr,确保格式收尾正确
这个正则能精准匹配所有你列出的合法格式,同时拒绝分钟不完整的错误格式,完全满足需求。
内容的提问来源于stack exchange,提问作者Mtszbrtw
相关产品推荐
相关产品推荐

