例如: 2015-01-17T18:23:02+00:00
由于字符串的某些组成部分被认为是"有效",因此在使用正则表达式时会遇到一些问题,因此可能不需要.
此外,字符串可以格式化为:2015-01-17T18:23:02Z轻微抛弃我
先谢谢你们.
fun*_*urm 50
根据我之前的答案,你可以做到这一点并且非常严格:
^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:Z|[+-][01]\d:[0-5]\d)$
Run Code Online (Sandbox Code Playgroud)

稍微怪异,但它会检查有效日期,包括闰年(Proleptic阳历),适用于1000-9999年,为无效次检查,如2 5:30或21:9 4,最大UTC的+/-偏移19:59 (或Z).
(现在超过+14:00或-12:00不会发生,但未来可能会发生).
完成:此答案仅支持基于OP给出的示例的ISO8601标准的子集.哪个是时间段中的秒数和UTC偏移中的分钟的扩展表示法.为了简洁它不支持基本记其中破折号和冒号被省略,或几分钟的在UTC偏差或最小单位的遗漏.也没有支持序数日期(一年中的日期)或一周一周的日期表示法.
支持基本符号,序数和省略秒/ UTC偏移分钟的正则表达式的扩展版本存在于此处.
根据前面的答案,这个正则表达式处理秒的分数.
^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d{1,9})?(?:Z|[+-][01]\d:[0-5]\d)$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17592 次 |
| 最近记录: |