コンソールの入力引数を検証する必要があります。ユーザーは、スペースで区切られた 2 つの引数のみを渡すことができます。
- 最初の引数は 1 から 100 の間でなければなりません
- 2 番目の引数は 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]
ゼロを含まない任意の 1 桁に一致し、その後に続く[0-9]?
任意の 1 桁または 0 桁に一致|
また100
数百に一致)
キャプチャ グループ 1 を閉じる\b\s+\b
単語区切り、スペース、および単語区切りが必要です。(
キャプチャ グループ 2 を開始
[1-9]
ゼロを含まない任意の 1 桁に一致し、その後に続く[0-9]?
任意の 1 桁または 0 桁に一致|
また[1-6]
1 から 6 までの任意の数字に一致し、その後に[0-9]{2}
任意の数字の 2 つに一致|
また7
7 の後に続く一致[0-4]
0 から 4 までの数字に一致し、その後に[0-9]
任意の 1 桁に一致|
また750
数字の 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)
{
...
}
}
正規表現を使用しないことをお勧めしますが、次のようなものです。
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
}
}
}
すぐそこに番号が表示されます。
他の人が言ったように、正規表現は最良の選択肢ではありませんが、本当に使いたいのであれば、これはうまくいくようです...
^(?:100|[1-9]\d?) (?:[1-7](?:[0-4]\d|50)|[1-9]\d?)$