Java IP Validator



所以我正在尝试为一个按钮创建一个验证器,该按钮必须检查 3 个文本字段,其中一个是 IP 地址。所以基本上用户必须自己输入完整的IP地址。

所以我遇到了一个不需要的语法错误,我确信这是由于文本字段引起的。

我尝试将文本字段转换为字符串,然后进行验证,但这似乎使情况变得更糟

private class theValidator implements ActionListener{
    public void actionPerformed(ActionEvent e)
    {           
        String textIP = txfIP.getText();
        txfIP.setInputVerifier(new InputVerifier() {
            Pattern pat = Pattern.compile("\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");
            public boolean shouldYieldFocus(JComponent input) {
                boolean inputOK = verify(input);
                if (inputOK) {
                    return true;
                } 
                else {
                    Toolkit.getDefaultToolkit().beep();
                    return false;
                }
            }
            public boolean verify(JComponent input) {
                JTextField field = (JTextField) input;
                Matcher m = pat.matcher(field.getText());
                return m.matches();
            }
        });
}
}

1)我没有看到txfIP.setInputVerifier(..的右括号

我建议使用一些像Eclipse这样的编辑器来编码,这样你就会发现很容易捕捉到这样的错误。

2)至于验证IP地址的正则表达式,您可以尝试一下。希望有帮助。

IPADDRESS_PATTERN = 
        "^([01]?\d\d?|2[0-4]\d|25[0-5])\." +
        "([01]?\d\d?|2[0-4]\d|25[0-5])\." +
        "([01]?\d\d?|2[0-4]\d|25[0-5])\." +
        "([01]?\d\d?|2[0-4]\d|25[0-5])$";

我建议你使用现有的IP验证器,就像Apache的验证器一样:https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html

最新更新