正则表达式校验字母数字及指定特殊字符失效问题求助
正则表达式替换C#字符校验循环的问题解决
原C#循环校验代码用于判断字符串是否仅包含大小写字母、数字、空格、()、-、\、/、&:
public static bool isAlphaNumeric(string s) { foreach (char c in s) { if (!(c >= 'A' && c <= 'Z') && !(c >= 'a' && c <= 'z') && !(c >= '0' && c <= '9') && c != '(' && c != ')' && c != '-' && c != '\\' && c != '/' && c != '&' && c != ' ') { return false; } } return true; }
替换后的正则版本无法正常工作,问题出在这几个点:
- 字符类中混入了需求外的
_和' a-z-A-Z写法错误,中间的-会被解析为无效的字符范围(z到A)- 若不需要限制字符串长度为1-30,
{1,30}属于多余限制
修正后的正则实现
public static bool isAlphaNumeric(string strToCheck) { // 仅允许大小写字母、数字、空格、()、-、\、/、&,无长度限制 Regex rg = new Regex(@"^[a-zA-Z0-9\s&()\\/-]+$"); return rg.IsMatch(strToCheck); }
正则说明
^和$确保匹配整个字符串,避免部分符合的情况[a-zA-Z0-9]匹配大小写字母和数字\s匹配空格(与原代码逻辑一致)&()直接匹配这三个特殊字符\\匹配反斜杠(正则中需转义)/直接匹配斜杠-放在字符类末尾,避免被识别为范围符号+表示至少包含一个有效字符(若允许空字符串,可替换为*)
如果需要保留长度限制(1-30个字符),可将+替换为{1,30}:
Regex rg = new Regex(@"^[a-zA-Z0-9\s&()\\/-]{1,30}$");
内容的提问来源于stack exchange,提问作者MainakChoudhury
相关产品推荐
相关产品推荐

