我很难理解正则表达式。在下面的代码中,我使用正则表达式来确定传递的数据是否为 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
}
请您参考如下方法:
Regex.IsMatch 在输入字符串中搜索模式(因此对于 3A5 返回真,因为它找到了 3)。
您还应该包括字符串的开始 (^) 和结束 ($):
String pattern = @"^[0-9]{1,3}$";
