文字列がIPアドレスであるかどうかを確認するにはどうすればよいですか?IPv4またはIPv6のどちらか?
最小および最大の文字数はいくつですか?
これは正規表現の答えになると思います。
文字列がIPアドレスであるかどうかを確認するにはどうすればよいですか?IPv4またはIPv6のどちらか?
最小および最大の文字数はいくつですか?
これは正規表現の答えになると思います。
.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)
}
私は以前にこれを行ったことがありますが、レイモンド・チェンの次の投稿が好きです。
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;
}
それを見て、それが何をしているのかを理解する方がはるかに簡単です。
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の数値に制限することで機能します。
その正規表現の半分は、最後のセグメントにピリオドがないという事実を処理するため、「。」をタックすると、半分にカットできます。可能な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)
}
@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
IPv4は次のようになります。/\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/
IPv6のルールについてはよくわかりません。