1

正規表現に頭を悩ませるのに苦労しました。次のコードでは、正規表現を使用して、渡されたデータが 1 ~ 3 桁の数字であるかどうかを判断しています。この式は、データが数字で始まる場合 (例: "200") に機能しましたが、データの最初の桁に文字が含まれていない場合 (例: "3A5") にも渡されました。メソッドでなんとかエラーを処理できましたINT32.TryParse()が、もっと簡単な方法があるはずです。

    if (LSK == MainWindow.LSK6R)
    {
        int ci;
        int length = SP_Command.Length;
        if (length > 3) return MainWindow.ENTRY_OUT_OF_RANGE;   //Cannot be greater than 999

        String pattern = @"[0-9]{1,3}";               //RegEx pattern for 1 to 3 digit number
        if (Regex.IsMatch(SP_Command, pattern))       //Does not check for ^A-Z. See below.
        {
            bool test = Int32.TryParse(SP_Command, out ci);     //Trying to parse A-Z.  Only if 
            if (test)                                           //it no letter will it succeed
            {
                FlightPlan.CostIndex = ci;                      //Update the flightplan CI
                CI.Text = ci.ToString();                        //Update the Init page
            }
            else return MainWindow.FORMAT_ERROR;                //It contained a letter
        }
        else return MainWindow.FORMAT_ERROR;                    //It didn't fit the RegEx
    }
4

2 に答える 2

3

Regex.IsMatch3A5は、入力文字列からパターンを検索します (したがって、 が見つかったため、に対して true を返します3)。

文字列の開始 ( ^) と終了 ( )も含める必要があります。$

String pattern = @"^[0-9]{1,3}$";
于 2013-09-16T01:44:18.953 に答える
1

行の開始/終了を追加すると役立つはずです。

^[0-9]{1,3}$
于 2013-09-16T01:45:25.120 に答える