You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式校验字母数字及指定特殊字符失效问题求助

正则表达式替换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:20:11