2016-03-27 13 views
0

基本的に、Javaで外部ライブラリを使用しないで文字列が有効なIPアドレスかどうかを確認しようとしていますもう一方の端に現用ホストがあるIP;未使用のIPでもかまいません)。 IPアドレスであるかどうかを確認することはできません。なぜなら、私はDNSサポートも望んでいるからです。以下のオプションが有効ですので:Java正規表現の文字列:ip:port stringに有効なIPv4アドレスまたはDNSアドレスが含まれていないか確認してください。

  • 1.2.3.4:55555
  • はlocalhost:1
  • google.com:12345
  • 1.2.abc:54321(?これが有効である)

が、以下は有効ではありません。

  • 1.2.3.4(なしポート)
  • 1.2:34(IPアドレスではなく)
  • ローカルホスト:12345(空間)
  • 8.8.8.8:abc(ポートスロットにない数字)
  • stackoverflow.com:234.5(基本的にのみ番号が従うべき:この時点で65536(範囲外のポート番号)

(私はこれを更新していきます)、私は以下のチェックを行います:

  • localhostの

    host != null; 
    !host.contains(" "); 
    host.contains(":"); 
    
    012私が思うの

    その他のチェックは行うことができますが、私は何をするかわからない:

    * 1とのみ1コロン が含まれています*それが唯一の数字とピリオドが含まれている場合、それは3とのみ3期、4が含まれている必要があります数字は0から255の間で指定してください。 *コロンの後の数字は0から65535までの数字です。

    ありがとうございます!

  • +0

    IPv6についてはどうですか? –

    答えて

    3

    私はこのような正規表現を使用します。

    import java.util.regex.Pattern; 
    
    public class IpCheck { 
    
        public static void main(String[] args) { 
    
         Pattern p = Pattern.compile("^" 
           + "(((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}" // Domain name 
           + "|" 
           + "localhost" // localhost 
           + "|" 
           + "(([0-9]{1,3}\\.){3})[0-9]{1,3})" // Ip 
           + ":" 
           + "[0-9]{1,5}$"); // Port 
    
         System.out.println(p.matcher("1.2.3.4:55555").matches()); 
         System.out.println(p.matcher("localhost:1").matches()); 
         System.out.println(p.matcher("google.com:12345").matches()); 
         System.out.println(p.matcher("1.2.abc:54321").matches()); 
    
         System.out.println(p.matcher("1.2.3.4").matches()); 
         System.out.println(p.matcher("1.2:34").matches()); 
         System.out.println(p.matcher("local host:12345").matches()); 
         System.out.println(p.matcher("stackoverflow.com:234.5").matches()); 
         System.out.println(p.matcher("localhost:65536").matches()); 
    
        } 
    
    } 
    

    プリント:

    true 
    true 
    true 
    true 
    false 
    false 
    false 
    false 
    true 
    

    それは私がすべての場合は、ポート番号を抽出することを示唆している。このため、ポート範囲を除いて動作しますが、正規表現の外側にあります。私の意見は、正規表現は整数範囲(まだ可能)をテストするように作られていないということです。

    +0

    ある日あなたは私にこのことがどのように作用するかを説明しなければならないでしょう:-P – QuaternionsRock

    関連する問題