問題は、数量詞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 つある場合に一致します。