0

私はC#を学んでおり、コンソールがアルファベット文字ではなく数字を入力として受け取る必要がある小さなテストプログラムを持っています。

string inputString;

        string pattern = "[A-Za-z]*";
        Regex re = new Regex(pattern);

        inputString = Console.ReadLine();

        while(re.Match(inputString).Success)
        {
            Console.WriteLine("Please stick to numerals");
            inputString = Console.ReadLine();
        }
        Console.WriteLine(inputString);

問題は、コンパイラがアルファベット文字と数字を区別しないことです。

おそらく任意の提案 コードは正しいようです。

4

2 に答える 2

4

私は正規表現の使いすぎが好きではないので、いつでも試すことができる代替手段を以下に示します...

public bool IsNumeric(string input)
{
    foreach(char c in input)
    {
       if(!char.IsDigit(c))
       {
          return false;
       }
    }

    return true;
}

これは次のように使用できます...

while(!IsNumeric(inputString))
{
   Console.WriteLine("Please stick to numerals");
   inputString = Console.ReadLine();
}

...もちろん、正規表現が必要な場合は、誰かがすぐに解決してくれると確信しています;)


以下のコメントを介して Eli Arbel に感謝します。LINQ 拡張メソッドを使用したい/使用できる場合は、このメソッドを短縮することもできます。

public bool IsNumeric(string input)
{
   return input.All(x => char.IsDigit(x));
}
于 2012-04-17T07:52:39.017 に答える
2

問題は、数量詞string pattern = "[A-Za-z]*";のために 0 文字にも一致することです。*

文字列に文字があるかどうかのみを確認したい場合は、次を使用してください

string pattern = "[A-Za-z]";

もちろん、これは ASCII 文字にのみ一致します。より良いアプローチは、Unicode プロパティを使用することです

string pattern = @"\p{L}";

\p{L}プロパティ "Letter" を持つ任意の Unicode コード ポイントに一致します。

ノート:

これは数字だけをチェックするのではなく、入力に文字があるかどうかをチェックしていることに気付いていただければ幸いです。もちろん、これは数字でも文字でもない文字を受け入れます!

数字のみを確認したい場合は、@musefan の回答を参照するか、この方法で正規表現を使用する必要があります

string inputString;

string pattern = @"^\p{Nd}+$";
Regex re = new Regex(pattern);

inputString = Console.ReadLine();

while (!re.Match(inputString).Success) {
    Console.WriteLine("Please stick to numerals");
    inputString = Console.ReadLine();
}
Console.WriteLine(inputString);

\p{Nd}または\p{Decimal_Digit_Number}: 表意文字スクリプトを除くすべてのスクリプトの 0 から 9 までの数字。

Unicode プロパティの詳細については、 www.regular-expressions.info/unicodeを参照してください。

次の代替手段は、入力に「数字がない」かどうかを確認することです。

string pattern = @"\P{Nd}";
...
while (re.Match(inputString).Success) {

パターンのみを変更する必要がある\P{Nd}のは、の否定で\p{Nd}あり、入力に数字以外が 1 つある場合に一致します。

于 2012-04-17T07:58:24.643 に答える