0

我需要验证控制台输入参数。用户只能传递由空格分隔的 2 个参数。

  1. 第一个参数应该在 1 到 100 之间
  2. 第二个参数应该在 1 到 750 之间。

我需要一个正则表达式来验证输入。请帮忙。

4

4 回答 4

4

描述

此正则表达式将匹配 1-100 空格 1-750

^\b([1-9][0-9]?|100)\b\s+\b([1-9][0-9]?|[1-6][0-9]{2}|7[0-4][0-9]|750)\b$

在此处输入图像描述

展开

  • ^匹配字符串的开头
  • \b匹配单词边界
  • (打开捕获组 1
    • [1-9]匹配任何不包括零的单个数字,后跟
    • [0-9]?匹配任何单个数字或无数字
    • |或者
    • 100匹配数字一百
    • )关闭捕获组 1
  • \b\s+\b需要分词、空格和分词。
  • (开始捕获组 2
    • [1-9]匹配任何不包括零的单个数字,后跟
    • [0-9]?匹配任何单个数字或无数字
    • |或者
    • [1-6]匹配任何数字 1 到 6 后跟
    • [0-9]{2}匹配任意数字中的两个
    • |或者
    • 7匹配一个七,然后
    • [0-4]匹配数字 0 到 4,后跟
    • [0-9]匹配任何单个数字
    • |或者
    • 750匹配数字七百五十
    • )关闭捕获组
  • \b$需要一个分词符和字符串结尾。
于 2013-06-19T04:51:46.590 回答
1

听起来你想要这样的模式:

^(1|[1-9]\d|100)\s+(1|[1-9]\d|[1-6]\d\d|7[0-5]\d)$

但是,您最好通过普通整数比较验证输入:

int int1, int2;
if (int.TryParse(param1, out int1) && int.TryParse(param2, out int2))
{
    if (int1 >= 1 && int1 <= 100 && int2 >= 1 && int2 <= 750)
    {
        ...
    }
}
于 2013-06-19T04:29:50.863 回答
0

正如其他人所说,正则表达式不是最好的选择,但如果你真的想使用它,这似乎工作......

^(?:100|[1-9]\d?) (?:[1-7](?:[0-4]\d|50)|[1-9]\d?)$
于 2013-06-19T04:51:35.683 回答
0

我宁愿建议不要使用正则表达式,而是这样的:

int a=0,b=0;    
if(args.Length != 2){
  // not 2 arguments
}else{
   if(!int.TryParse(args[0], out a) || !int.TryParse(args[1], out b)){
      // not numbers
   }else{
      if(a < 1 || a > 100 || b < 1 || b > 750){
         // out of ranges
      }else{
         // everything fine
      }
   }
}

你的号码就在那里。

于 2013-06-19T04:31:01.043 回答