2008-09-15 3 views
4

管理用Web UIから取得される文字列があるため、文字列は間違いありません。この文字列がJavaのIPアドレスかホスト名かどうかをどのように調べることができますか?文字列がIPであるかホスト名であるかをどのように判断するのですか

更新:私は自分自身を明確にしていないと思うが、私はIPとホスト名を区別するためにJava SDKに何かがあるかどうか尋ねてきた。混乱のために申し訳ありませんが、誰にも感謝しています。これに答える時間がかかります。

答えて

14

あなたはこのパターンで正規表現を使用することができます:それはIPv4アドレスだ場合を教えてくれます

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

+0

あなたが本当の範囲の検証が必要な場合、正規表現はそれを行うための最善の方法は本当にないが、十分以上です。 – DevelopingChris

2

文字列は、例えば、number.number.number.numberの形式と一致するかどうかを確認できます。

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 

0 - 999から何もマッチします。

それ以外の場合は、デフォルトでホスト名にすることができます。

+0

999.999.999.999は有効なIP形式ではありません。あなたの正規表現はより具体的である必要があります – Vagnerr

+4

その有効なホスト名のいずれかとは思わない – DevelopingChris

2

であり、まったく異なるものではないと仮定していますか?もしそうなら、正規表現を使って "ドット付きクワッド(dotted quad)"フォーマットに合っているかどうかを調べるでしょう。

0

正規表現のマッチではできませんでしたか?

1
URI validator = new URI(yourString); 

このコードは、IPアドレスまたはホスト名を検証します。 (文字列が無効な場合、不正な形式のURI例外がスローされます)

2つを区別しようとすると、あなたの質問が読めません。

0

InetAddress.getByName(addr)コールでセキュリティマネージャを使用することができます。

addrがドット付きクワッドでない場合、getByNameは、セキュリティマネージャがcheckConnect(addr, -1)呼び出しとしてキャプチャできる名前ルックアップを実行する接続を実行しようとします。その結果、キャッチできるSecurityExceptionがスローされます。

getByNameコールが行われる前に完全セキュリティ特権を実行している場合は、System.setSecurityManager()を使用できます。

0

ハイフン、アンダースコア、角括弧 ' - '、 '_'、 '[]'のような文字のあいまいさがあります。

Java SDKにはこの領域にいくつかの制限があります。 InetAddress.getByNameを使用すると、DNS名解決を行い、アドレスを解決するためにネットワーク上に出て行きます。これは、ホストとアドレスの両方を検出するだけの場合は高価で不要です。また、アドレスが若干異なるが有効な形式(IPv6で共通)で記述されている場合、InetAddress.getByNameの結果で文字列比較を行うと機能しません。

The IPAddress Java libraryとなります。 javadocはリンクから入手できます。免責事項:私はプロジェクトマネージャーです。

static void check(HostName host) { 
    try { 
     host.validate(); 
     if(host.isAddress()) { 
      System.out.println("address: " + host.asAddress()); 
     } else { 
      System.out.println("host name: " + host); 
     } 
    } catch(HostNameException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

public static void main(String[] args) { 
    HostName host = new HostName("1.2.3.4"); 
    check(host); 
    host = new HostName("1.2.a.4"); 
    check(host); 
    host = new HostName("::1"); 
    check(host); 
    host = new HostName("[::1]"); 
    check(host); 
    host = new HostName("1.2.?.4"); 
    check(host); 
} 

出力:私はちょうど桁のパターンをテスト思う

address: 1.2.3.4 
host name: 1.2.a.4 
address: ::1 
address: ::1 
1.2.?.4 Host error: invalid character at index 4 
関連する問題