0

我正在使用以下代码来接受用户输入。我只想将用户输入限制为单个 alpha (az) 字符。我发现很多使用 IsNumber 来验证整数输入的验证,以及很多关于在输入字符串上使用正则表达式的信息,但我一直无法发现如何使用此代码限制输入可能性。有人可以指出我正确的方向吗?

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

3 回答 3

1

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

但它很容易检查一个字符是小写的 az 字母。例如,使用普通、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 可以存储它。这些字母是例如带有锐角的漂亮匈牙利字母和这些事物之王:á,é,ő,ű,ö,ü等(但法语有很多,还有荷兰语等......)

于 2013-05-12T02:18:38.517 回答
0

为了判断一个有效的字符串,你可以判断

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

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

pre = read();
while (!valid(pre))
  pre = read();
于 2013-05-12T02:21:59.290 回答
0

你为什么不使用正则表达式

if (Regex.IsMatch(pre[0].ToString(), @"[A-Za-z]"))
   {
       //do someting
   }
   else
   {
       //do someting
   } 
于 2013-05-12T02:26:33.803 回答