9

文字列がIPアドレスであるかどうかを確認するにはどうすればよいですか?IPv4またはIPv6のどちらか?

最小および最大の文字数はいくつですか?

これは正規表現の答えになると思います。

4

6 に答える 6

6

.NETには、便利なメソッドTryParseを持つIPアドレスタイプがあります。

例:

if(System.Net.IPAddress.TryParse(PossibleIPAddress, validatedIPAddress)){
    //validatedIPAddress is good
}

// or more simply:
bool IsValidIPAddress(string possibleIP){
    return System.Net.IPAddress.TryParse(PossibleIPAddress, null)
}
于 2008-09-03T19:42:43.643 に答える
6

私は以前にこれを行ったことがありますが、レイモンド・チェンの次の投稿が好きです。

http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx

彼が基本的に得意なことのために正規表現を使用することを提唱しているところ:トークンを解析すること。次に、結果を評価します。彼の例:

function isDottedIPv4(s)
{
 var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
 return match != null &&
        match[1] <= 255 && match[2] <= 255 &&
        match[3] <= 255 && match[4] <= 255;
}

それを見て、それが何をしているのかを理解する方がはるかに簡単です。

于 2008-09-03T19:48:45.720 に答える
4

IPv4の場合、この正規表現を使用できます。

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

非常に複雑に見えますが、各クワッドを0〜255の数値に制限することで機能します。

于 2008-09-03T19:29:27.043 に答える
0

その正規表現の半分は、最後のセグメントにピリオドがないという事実を処理するため、「。」をタックすると、半分にカットできます。可能なIPアドレスの最後まで。

このようなもの:

bool IsValidIPAddress(string possibleIP){
  CrazyRegex = \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}\b
  return Regex.Match(possibleIP+'.', CrazyRegex)
}
于 2008-09-03T19:35:09.590 に答える
0

@unslicedは正しいですが、もちろん実装によって異なります。サイトにアクセスするユーザーからのIPを解析する場合は、xxxx形式である必要があるため正規表現を使用しても問題ありません。

IPv6の場合、これを使用できます

[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}

ただし、IPv6でははるかに複雑であるため、すべてをキャッチするわけではありません。ウィキペディアによると、以下の例はすべて技術的に正しいものですが、上記の正規表現は*が付いているもののみをキャッチします。

2001:0db8:0000:0000:0000:0000:1428:57ab*
2001:0db8:0000:0000:0000::1428:57ab*
2001:0db8:0:0:0:0:1428:57ab*
2001:0db8:0:0::1428:57ab
2001:0db8::1428:57ab
2001:db8::1428:57ab
于 2008-09-03T19:38:43.637 に答える
-1

IPv4は次のようになります。/\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/

IPv6のルールについてはよくわかりません。

于 2008-09-03T21:02:15.590 に答える