如何在Bash脚本中验证指定格式的带时区ISO 8601日期时间字符串
Bash校验固定时区ISO 8601日期格式方案
校验规则说明
仅接受%Y-%m-%dT%H:%M:%S+0200格式的日期字符串,语法校验规则如下:
- 年份为任意4位数字,支持0001到9999
- 月、日、时、分、秒均为2位数字
- 固定使用
T作为日期和时间的分隔符 - 固定时区后缀为
+0200
实现方法
使用Bash正则匹配完成校验,不需要调用系统date工具,性能更高,仅做语法层面校验:
#!/bin/bash # 入参1:待校验的日期字符串 # 返回值:0=格式合法,1=格式不合法 is_valid_iso8601_with_tz() { local datetime_str="$1" # 正则规则:严格匹配指定格式,同时校验月/日/时分秒的数值范围 local match_regex='^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\+0200$' [[ $datetime_str =~ $match_regex ]] && return 0 || return 1 } # 使用示例 test_str="2024-12-31T23:59:59+0200" if is_valid_iso8601_with_tz "$test_str"; then echo "输入$test_str 格式合法" else echo "输入$test_str 格式不合法" fi
简化版本(无数值范围校验)
如果不需要校验月份是否在1-12、日期是否在1-31等数值范围,仅校验字符格式和分隔符,可以使用更简单的正则:
替换正则变量为:
local match_regex='^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\+0200$'
内容的提问来源于stack exchange,提问作者Masquerade
相关产品推荐
相关产品推荐

