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

如何在C#中限制Console.ReadLine()输入,禁止特殊字符?

在C#中限制Console.ReadLine()的特殊字符输入

当然可以限制输入,有两种常用方案:实时拦截非法字符,或者输入后高效过滤。

方案一:实时拦截(输入时直接禁止非法字符)

这种方式在用户输入时就拦截掉指定的特殊字符,只允许合法字符显示和录入,体验更直观。核心是用Console.ReadKey()逐个处理按键,判断是否属于禁止列表:

Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Please type-in the {reqVariables[h]} of the model below:");
Console.ForegroundColor = ConsoleColor.Magenta;

StringBuilder inputBuilder = new StringBuilder();
while (true)
{
    var key = Console.ReadKey(true); // 不自动回显按键,手动控制显示
    // 按下回车时结束输入
    if (key.Key == ConsoleKey.Enter)
    {
        Console.WriteLine();
        break;
    }
    // 处理退格键,删除已输入的字符
    if (key.Key == ConsoleKey.Backspace && inputBuilder.Length > 0)
    {
        inputBuilder.Remove(inputBuilder.Length - 1, 1);
        Console.Write("\b \b"); // 在控制台删除最后一个字符
        continue;
    }
    // 定义禁止输入的特殊字符集合
    char[] forbiddenChars = { '/', '%', '$', '#' };
    // 仅当字符合法时,追加到输入并显示
    if (!forbiddenChars.Contains(key.KeyChar))
    {
        inputBuilder.Append(key.KeyChar);
        Console.Write(key.KeyChar);
    }
    // 非法字符直接忽略,不做任何处理
}
freeTextSerialNumbers = inputBuilder.ToString();

方案二:输入后高效过滤(替代你的Replace方式)

如果觉得实时拦截逻辑稍复杂,也可以在用户输入完成后统一过滤,相比多次调用Replace(),用LINQ筛选合法字符更高效:

Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Please type-in the {reqVariables[h]} of the model below:");
Console.ForegroundColor = ConsoleColor.Magenta;
freeTextSerialNumbers = Console.ReadLine();

// 过滤掉禁止的特殊字符
char[] forbiddenChars = { '/', '%', '$', '#' };
freeTextSerialNumbers = new string(freeTextSerialNumbers.Where(c => !forbiddenChars.Contains(c)).ToArray());

两种方案各有优劣:实时拦截能让用户即时感知输入限制,避免无效输入;输入后过滤代码更简洁,适合对交互要求不高的场景。

内容的提问来源于stack exchange,提问作者Joshua Jaynes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:06