城市与街道验证正则表达式不符合预期,需强制逗号后非空
修改后的正则表达式解决方案
修正后的正则
^[a-zA-Z0-9 -]+,\s*(?:[a-zA-Z0-9 .-][a-zA-Z0-9 .-,]*)(?:\n[a-zA-Z0-9 -]+,\s*(?:[a-zA-Z0-9 .-][a-zA-Z0-9 .-,]*))*$
改动说明
原正则允许逗号后仅输入空格的核心问题是:街道部分的[a-zA-Z0-9 .-]+包含空格,且前面的[^S\n]*可匹配任意非S/换行字符(含全空格),导致纯空格内容被判定为合法。修正点如下:
- 将逗号后的任意字符匹配
[^S\n]*替换为明确的空格匹配\s*,缩小匹配范围避免歧义 - 把街道部分的
[a-zA-Z0-9 .-]+调整为(?:[a-zA-Z0-9 .-][a-zA-Z0-9 .-,]*):- 前置
[a-zA-Z0-9 .-]强制要求逗号后至少存在一个非空格的有效字符,直接杜绝纯空格的非法输入 - 后置
[a-zA-Z0-9 .-,]*允许后续出现空格、逗号及其他合法字符,兼容你列出的City-A, Street,这类以逗号结尾的合法场景
- 前置
- 对换行分隔的每一行条目应用相同规则,确保所有输入行都符合校验要求
合法输入验证
你提供的所有示例输入均可被该正则正确匹配:
City-A, Street-BCity, StreetCity, Street-ACity-A, Street,City, ul. StreetCity, ul.Street
而类似City, (逗号后仅空格)的非法输入会被直接拒绝。
内容的提问来源于stack exchange,提问作者Reddi
相关产品推荐
相关产品推荐

