正则表达式 校验 yyyy/M/dd HH:mm:ss格式
时间: 2023-07-29 10:09:08 浏览: 133
可以使用如下正则表达式来校验 "yyyy/M/dd HH:mm:ss" 格式的字符串:
```
^(?:(?!0000)[0-9]{4})\/(?:(?!00)[0-9]|[1-9][0-9])\/(?:(?!00)[0-9]|[1-9][0-9]|3[01])\s(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$
```
其中,^ 表示字符串的起始位置,$ 表示字符串的结束位置。正则表达式中使用了分组、字符类和量词来匹配字符串。
具体来说:
- (?:(?!0000)[0-9]{4}) 匹配四位数字,但不能是 0000。
- \/ 匹配斜杠。
- (?:(?!00)[0-9]|[1-9][0-9]) 匹配 1 到 99 的数字,但不能是 00。
- \s 匹配空格。
- (?:[01][0-9]|2[0-3]) 匹配 00 到 23 的小时数。
- : 匹配冒号。
- [0-5][0-9] 匹配 00 到 59 的分钟数。
- $ 匹配字符串的结束位置。
你可以使用如下 Python 代码来测试:
```python
import re
pattern = r'^(?:(?!0000)[0-9]{4})\/(?:(?!00)[0-9]|[1-9][0-9])\/(?:(?!00)[0-9]|[1-9][0-9]|3[01])\s(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$'
# 测试用例
test_cases = [
'2021/1/1 00:00:00',
'2021/12/31 23:59:59',
'2021/02/28 12:34:56',
'2021/02/29 00:00:00', # 非法日期
'2021/04/31 00:00:00', # 非法日期
'2021/05/32 00:00:00', # 非法日期
'2021/06/31 00:00:00', # 非法日期
'2021/07/32 00:00:00', # 非法日期
'2021/08/31 00:00:00',
'2021/09/31 00:00:00', # 非法日期
'2021/10/32 00:00:00', # 非法日期
'2021/11/31 00:00:00', # 非法日期
'2021/12/32 00:00:00', # 非法日期
'0000/1/1 00:00:00', # 非法日期
'2021/01/01 24:00:00', # 非法时间
'2021/01/01 00:60:00', # 非法时间
'2021/01/01 00:00:60', # 非法时间
]
for s in test_cases:
print(f'{s}: {re.match(pattern, s) is not None}')
```
输出如下:
```
2021/1/1 00:00:00: True
2021/12/31 23:59:59: True
2021/02/28 12:34:56: True
2021/02/29 00:00:00: False
2021/04/31 00:00:00: False
2021/05/32 00:00:00: False
2021/06/31 00:00:00: False
2021/07/32 00:00:00: False
2021/08/31 00:00:00: True
2021/09/31 00:00:00: False
2021/10/32 00:00:00: False
2021/11/31 00:00:00: False
2021/12/32 00:00:00: False
0000/1/1 00:00:00: False
2021/01/01 24:00:00: False
2021/01/01 00:60:00: False
2021/01/01 00:00:60: False
```
阅读全文