写一个程序,需要用到验证IP地址输入是否规范的方法,但是找了很多方法都不能使用,正则表达式我又不会用,哪位高手有办法,发个办法上来,给我解解难题。
我实现了一个方法,可以验证所有的字符是否是非法字符,可以实现仅能输入数字和.,但是其他的功能不知道该怎么实现。比如说整个验证出192.168.0.6的格式。

解决方案 »

  1.   

    我对java用的还是比较少,找了几个正则表达式,但是都不能用。哪位高手有办法,提供一个在java下可用的正则式也可以啊。
    我找到的这个不知道是那个语言下面的东西,大家看看帮忙改造一下。
    g_fValidateForm.regexp_ip = /^((25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)$/;
    当然了,能给出整个判断ip的程序是最好的。
      

  2.   

    假设IP为 A.B.C.D
    先把它分成四段存入String[]segment中
    Pattern p = Pattern.compile(".");
    String[]segment = p.split(ip);
    则segment就是{A,B,C,D}啦,再按照你所要求的规则去判断。
    比如你要求的IP必须是这个网段192.168.0.*,那么就判断 A==192, B==168, C==0, -1<D<256 方法是土了点,呵呵,希望有用~
      

  3.   

    看不清的话重新格式化一下    public static boolean isValidIpAddress(String ipaddr) {
            String[] parts = ipaddr.split("[.]");
            if (parts.length != 4) {
                System.out.println("---- length of parts is " + parts.length);
                return false;
            }        for (int i = 0; i < parts.length; i++) {
                int ipart = -1;
                try {
                    ipart = Integer.parseInt(parts[i]);
                } catch (NumberFormatException e) {
                    System.out.println("---- illegal number " + parts[i]);
                    return false;
                }
                if (ipart <= 0 || ipart > 255) {
                    System.out.println("---- out of range " + parts[i]);
                    return false;
                }
            }
            return true;
        }
      

  4.   

    谢谢YidingHe(机枪兵) ,但是我还是有一点不清楚。我现在做的是一个模块,如果不正确的话最好是抛出一个错误。你的程序我不知道能不能适用。
    能不能给我一段完全判断的,包括字符、长度、大小的判断。
      

  5.   

    0-99: (?!\d\d\d)\d+
    100-199: 1\d\d
    200-249: 2[0-4]\d
    250-255: 25[0-5]于是:0-255:(?!\d\d\d)\d+|1\d\d|2[0-4]\d|25[0-5]于是:0.0.0.0 - 255.255.255.255 就是:
    \b((?!\d\d\d)\d+|1\d\d|2[0-4]\d|25[0-5])\.((?!\d\d\d)\d+|1\d\d|2[0-4]\d|25[0-5])\.((?!\d\d\d)\d+|1\d\d|2[0-4]\d|25[0-5])\.((?!\d\d\d)\d+|1\d\d|2[0-4]\d|25[0-5])\b
      

  6.   

    如果你想抛出异常,可以在System.out.println()的地方抛出。
      

  7.   

    boolean b = Pattern.matches("(前面所说的表达式)", "192.168.0.6");给你一个文档,讲解正则表达式:
    http://www.regexlab.com/zh/regref.htm给你一个测试工具,可以进行测试:
    http://www.regexlab.com/zh/workshop.asp?pat=%5Cb%28%28%3F%21%5Cd%5Cd%5Cd%29%5Cd%2B%7C1%5Cd%5Cd%7C2%5B0%2D4%5D%5Cd%7C25%5B0%2D5%5D%29%5C%2E%28%28%3F%21%5Cd%5Cd%5Cd%29%5Cd%2B%7C1%5Cd%5Cd%7C2%5B0%2D4%5D%5Cd%7C25%5B0%2D5%5D%29%5C%2E%28%28%3F%21%5Cd%5Cd%5Cd%29%5Cd%2B%7C1%5Cd%5Cd%7C2%5B0%2D4%5D%5Cd%7C25%5B0%2D5%5D%29%5C%2E%28%28%3F%21%5Cd%5Cd%5Cd%29%5Cd%2B%7C1%5Cd%5Cd%7C2%5B0%2D4%5D%5Cd%7C25%5B0%2D5%5D%29%5Cb&txt=192%2E168%2E0%2E6%2C+192%2E256%2E0%2E6%2C+192%2E168%2E0%2E255
      

  8.   

    Pattern p = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"); Matcher m = p.matcher("192.168.0.6");
     boolean b = m.matches(); // ==> true m = p.matcher("192.256.0.6");
     b = m.matches(); // ==> false
      

  9.   

    光杆兵给的boolean b = Pattern.matches("(前面所说的表达式)", "192.168.0.6");不行
    表达式中有一段报错。
    不过我把机枪兵给的程序改了一下,可以使用了。谢谢两位。
      

  10.   

    表达式中的 '\' 写在 java 代码中,需要写成 '\\'
      

  11.   

    Pattern p = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");Matcher m = p.matcher("192.168.0.6");
    boolean b = m.matches(); // ==> true
            
    System.out.println(b);m = p.matcher("192.256.0.6");
    b = m.matches(); // ==> falseSystem.out.println(b);