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