入力された値が
0 ≦ n ≦ 255
でコンマは3つあって…なんてif文で書くのは馬鹿らしいので今すぐやめよう!IPAddress.TryParseメソッド
MailAddressクラスもあることだし、IPAddressクラスだってあるだろうと思ったらホントにあったやつ。
チェックの定番「TryParse」を使って有効性チェックを行う。
これを実装すると以下のようになる。
string input = Console.ReadLine();
System.Net.IPAddress address;
if (System.Net.IPAddress.TryParse(input, out address))
{
// IPアドレスとして認識できる
}
みんな大好き、正規表現
次に思いついたチェック方法は、正規表現を使うもの。
実装すると以下のようになる。
using System.Text.RegularExpressions;
string input = Console.ReadLine();
if (Regex.IsMatch(input, @"[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"))
{
// IPアドレスとして認識できる
}
正規表現の説明
- [0-9] → 数値かどうか判定する(0~9かどうか)
- {1,3} → 桁数を判定する(1桁~3桁かどうか)
- [0-9].[0-9] → 数値の間にピリオドがあるか判定する
これを全部つなげて
[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
とすれば0.0.0.0~255.255.255.255
かどうかのチェックができる。IPアドレスの落とし穴
ちなみにIPアドレスをゼロパディング(ゼロ埋め)するとバグの温床になりかねない。
- 先頭が0 → 8進数になる
- 先頭が0x → 16進数になる
192.168.064.1
と入力すると192.168.52.1
と認識される。このあたりを注意しないと、リリース後にバグが出たりするので注意。
参考
以上
written by @bc_rikko
"[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
返信削除ではなく
[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}
ですね。
正規表現においてピリオドは、
改行文字(\n)以外の任意の一文字を表します。