C#编写正则验证逗号分隔alphanumeric串或纯空格(禁止逗号开头)
现有代码问题分析
- 逻辑判断写反:当前代码正则匹配成功就将
result设为false,相当于符合规则的字符串反而被判定为无效,完全不符合需求。 - 正则分支无起止锚点:纯空格分支
*没有加^和$锚点,只要字符串中包含任意空格就会匹配成功,这是带特殊字符的字符串也能通过校验的核心原因。 - 第一个分支规则缺陷:
- 字符集
[a-zA-Z0-9,-,]存在冗余的短横线和重复逗号,属于不规范写法 - 第一个分支要求首字符必须是字母数字,无法匹配你允许的仅含多个逗号的场景
- 字符集
- 未限制全串匹配:正则整体没有包裹起止锚点,存在部分匹配就返回成功的问题。
修正方案
正则规则说明
修正后的正则为:@"^(\s*|[a-zA-Z0-9][a-zA-Z0-9,]*)$"
^和$锚定整个字符串,必须全串符合规则才会匹配成功- 第一个分支
\s*匹配任意数量的纯空白字符串,如果仅需匹配英文空格可替换为* - 第二个分支
[a-zA-Z0-9][a-zA-Z0-9,]*保证首字符为字母数字(禁止逗号开头),后续可跟任意数量的字母数字或英文逗号,符合允许末尾逗号、多个连续逗号的要求,同时自动拦截中间带空格、带特殊字符的场景。
修正后代码
bool result = false; Regex regx = new Regex(@"^(\s*|[a-zA-Z0-9][a-zA-Z0-9,]*)$"); if (regx.IsMatch(rowUpdate.ConNoteNumber)) { result = true; } return result; // 逻辑简化写法 // return Regex.IsMatch(rowUpdate.ConNoteNumber, @"^(\s*|[a-zA-Z0-9][a-zA-Z0-9,]*)$");
内容的提问来源于stack exchange,提问作者Alex Holmes
相关产品推荐
相关产品推荐

