0

所以我正在尝试为一个按钮创建一个验证器,该按钮必须检查 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();
            }
        });
}
}
4

2 回答 2

1

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])$";
于 2013-10-31T15:00:54.577 回答
0

我建议您使用现有的 IP 验证器,例如 Apache 中的那个: https ://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html

于 2013-10-31T15:08:16.747 回答