0

ユーザー入力を受け入れるために次のコードを使用しています。ユーザー入力を 1 つの英字 (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 < input.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 などのキーも読み取るため、すべてのキー、さらにはタブと Caps Lock)。MSDN を参照してください: http://msdn.microsoft.com/en-us/library/system.console.read.aspx

また、Unicode 文字をサポートする場合は、この関数を使用する必要があるかもしれません: http://msdn.microsoft.com/en-us/library/yyxz6h5w.aspx Unicode 文字は通常 1 バイトではないことに注意してください。しかし、char はそれを格納できます。これらの文字は、たとえば、急性記号を含む美しいハンガリー文字と、á、é、ő、ű、ö、ü などの王様です (ただし、フランス語にも多くの文字があり、オランダ語などもあります...)

于 2013-05-12T02:18:38.517 に答える
0

なぜ正規表現を使わないのです

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

有効な文字列を判断するには、次のように判断できます

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

入力の可能性を制限するために、入力が無効な場合にループするループを作成できます。

pre = read();
while (!valid(pre))
  pre = read();
于 2013-05-12T02:21:59.290 に答える