如何在c#中将用户输入限制为单个字母字符?

时间:2013-05-11 02:23:59

标签: c# input user-input readkey

我正在使用以下代码接受用户输入。我想将用户输入仅限制为单个alpha(a-z)字符。我找到了很多使用IsNumber来验证整数输入的验证,以及关于在输入String上使用正则表达式的大量信息,但我无法揭示如何使用此代码限制输入可能性。有人能指出我正确的方向吗?

    public char promptForGuess()
    {
        Console.Write("\nGuess a letter: ");
        String pre = Console.ReadKey().Key.ToString();
        string pre2 = pre.ToUpper();
        char pre3 = Convert.ToChar(pre2);
    }

3 个答案:

答案 0 :(得分:1)

你不能限制用户只在控制台上输入az字符 - 你必须检查输入,他可以写任何字符(只需考虑输入是否从带有<的文件重定向到你的程序,例如yourapp.exe< input.dat)。

但很容易检查一个字符是小写的a-z字母。例如。使用plain,ASCII,C策略(我将使用您定义的变量):

if('A' <= pre3 && pre3 <'Z') { // pre3 was made upper in your code
    // input OK
} else {
    // input NOK
}

使用正则表达式:

Regex r = new Regex(@"^[a-zA-Z]$");
return r.IsMatch(pre);

如果你不能允许不区分大小写的字符,只需更改我写的代码。

无论如何,我认为你需要Console.Read()(ReadKey也读取箭头,F1-F12等键,所以所有键,甚至标签和大写锁定)。请参阅MSDN:http://msdn.microsoft.com/en-us/library/system.console.read.aspx

如果您支持unicode字母,也许您应该使用此功能:http://msdn.microsoft.com/en-us/library/yyxz6h5w.aspx 请注意,unicode字母通常不是一个字节!但是char可以存储它。这些字母例如是美丽的匈牙利字母与尖锐的东西和这些东西:á,é,ő,ű,ö,ü等(但法语也有很多,还有荷兰语......)

答案 1 :(得分:0)

为判断有效字符串,您可以通过

判断
str.length() == 1 && str[0] >= 'a' && str[1] <= 'z'

并且为了限制输入可能性,您可以编写一个循环,如果输入无效,则循环。

pre = read();
while (!valid(pre))
  pre = read();

答案 2 :(得分:0)

为什么不使用正则表达式

if (Regex.IsMatch(pre[0].ToString(), @"[A-Za-z]"))
   {
       //do someting
   }
   else
   {
       //do someting
   }