2017-05-21 42 views
-1

入力が実際に数値かどうかを検証する静的メソッドを作成しようとしていて、正規表現でそれをやりたい私はそれをしようとすると "intを文字列に変換できません"というエラーが出ますが、整数も正規表現を使って比較できることは私の理解です。C#正規表現の正規表現

これまでの私の静的な方法です。

public static void validatenumber(int number) 
    { 
     Regex regex = new Regex("^[0-9]+$"); 

     if (regex.IsMatch(number)) 
     { 
      Console.WriteLine("The input is a number"); 
     } 
     else 
     { 
      Console.WriteLine("The input is not a number"); 
     } 
    } 

これは私が検証しようとしている入力です。これはMainメソッドにあります。 int型であることをを必要私の主な方法で

 Console.WriteLine("Please enter a number"); 
     int number= Convert.ToInt32(Console.ReadLine()); 
     validatenumber(number); 

私の変数number、私はそれを変更することはできません。

+5

「int」が数値であることを確認する際のポイントは何ですか?もちろん、それは数字です。そうしないと、実行時例外が発生します。 –

+0

@KobyDouek私が意図しているのは、ユーザが数字の代わりに文字やその他の記号を入力しないことを確認することです。 – Gonzalo

+0

'int number = Convert.ToInt32(Console.ReadLine()); 'で問題があります。以下の答え。 – Svek

答えて

3

問題はRegexエラーではありませんが、数字としてintを検証しようとしています。このバリデーションには意味がありません。なぜなら、コンパイラはint変数が数値以外のものを保持することを決して許さないからです。 YOTメソッドは、パラメータとしてstringを受けた場合

それは理にかなって:

validatenumber(string number)

その場合、あなたは文字列とRegex動作するので、このエラーを取得しないでしょう。

+0

だから私はこれを正規表現で検証してはいけないのですか?文字列でのみ使用しますか? – Gonzalo

+2

はい'Regex'は文字列のみを検証することです。 'int'変数を数値として検証する必要はありません - それらは**数値でなければなりません。 –

+1

あなたの入力がテキストボックスから来るように見えます。そうであれば、それは文字列として出てきます。これを検証し、必要に応じて解析します。 @hendrix – Arvayne

3

あなたのコードに問題があり、あなたの正規表現につながります(正規表現はstringではなくintで実行する必要があります)。

Console.WriteLine("Please enter a number"); 
int number= Convert.ToInt32(Console.ReadLine()); // <--- Here! 
validatenumber(number); 

Console.ReadLine()は、文字列を返します。だから、Convert.ToInt32()を実行しようとすると、コードでエラーが発生したり、予期しない結果が発生したりします。

次のように見えるようにコードを変更する必要があります。その後、

static void Main(string[] args) 
{ 
    ... 

    Console.WriteLine("Please enter a number"); 
    string numberString = Console.ReadLine(); 
    int number = ConvertAndValidateNumber(number); // we are now going to return an int 

    ... 
} 

と読みする方がはるかに簡単ですint.TryParse()方法を、使用してint型を返すためにvalidatenumber方法を変更します。

public static int ConvertAndValidateNumber(string numberString) 
{ 
    int.TryParse(numberString, out int number); 
    return number; 
} 

あなたが本当に(いくつかの非常に特別な場合には理にかなっている)正規表現を使用したい場合は、上記の方法に変更することができます。

public static int ConvertAndValidateNumberUsingRegEx(string numberString) 
{ 
    int number; 

    // 
    // put your RegEx here... 
    // 

    // and don't forget to assign the converted string value into the number 
    number = (your converted string); 

    // return it 
    return number; 
} 

あなたはまた、あなたの正規表現することを検証することをここでテストして有効ですhttp://regexr.com/

+0

ここで私の問題は、ユーザーが文字を入力するときに例外が発生することです。つまり、制御しようとしているものの、成功していないものです。 – Gonzalo

+0

@hendrixあなたの質問にもっと簡潔に答えを更新しました。 – Svek