Bash中验证逗号分隔字符串:仅含X/Y/Z加数字的校验方案
Bash 逗号分隔字符串的格式验证方案
你的原有代码存在两个核心问题:
- 仅排除了部分特殊字符,无法覆盖所有非法字符(比如非X/Y/Z的字母、空格等)
- 只检查字符串包含X/Y/Z,未校验每个元素的格式(比如
X3Y6这种连写的非法元素会被误判)
正确的验证方案
使用扩展正则表达式精准匹配合法格式,确保字符串仅由「X/Y/Z(大小写)+任意数字」的元素通过逗号分隔组成,无其他非法字符。
实现代码
#!/bin/bash check_valid_format() { local input="$1" # 正则规则:开头到结尾必须是一个或多个合法元素,元素间用逗号分隔 local valid_pattern='^([XxYyZz][0-9]+)(,[XxYyZz][0-9]+)*$' if [[ $input =~ $valid_pattern ]]; then echo "OK" else echo "Not OK" fi } # 测试示例 check_valid_format "X4,Y1,Z5" # 输出 OK check_valid_format "Z2,y6,X1" # 输出 OK check_valid_format "X3Y6,Z8" # 输出 Not OK check_valid_format "A1,B2,X8" # 输出 Not OK check_valid_format "N1P8*" # 输出 Not OK check_valid_format "X" # 输出 Not OK(仅字母无数字) check_valid_format "Y7," # 输出 Not OK(末尾多余逗号)
正则规则解释
^:匹配字符串起始位置[XxYyZz][0-9]+:匹配单个合法元素:X/Y/Z(大小写)后接至少一个数字(,[XxYyZz][0-9]+)*:匹配0个或多个「逗号+合法元素」的组合,支持多元素分隔$:匹配字符串结束位置
这样可以严格校验所有符合要求的输入,同时排除各种非法格式。
内容的提问来源于stack exchange,提问作者vashish
相关产品推荐
相关产品推荐

