我需要验证控制台输入参数。用户只能传递由空格分隔的 2 个参数。
- 第一个参数应该在 1 到 100 之间
- 第二个参数应该在 1 到 750 之间。
我需要一个正则表达式来验证输入。请帮忙。
此正则表达式将匹配 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$
需要一个分词符和字符串结尾。听起来你想要这样的模式:
^(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)
{
...
}
}
正如其他人所说,正则表达式不是最好的选择,但如果你真的想使用它,这似乎工作......
^(?:100|[1-9]\d?) (?:[1-7](?:[0-4]\d|50)|[1-9]\d?)$
我宁愿建议不要使用正则表达式,而是这样的:
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
}
}
}
你的号码就在那里。