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.IsMatch在输入字符串中搜索模式(因此返回 true ,3A5因为它找到了3)。

您还应该包括字符串的开始( ^)和结束( ):$

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

添加行开始/结束应该会有所帮助。

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