正则表达式的问题

时间:2014-11-30 17:14:48

标签: java regex

我有以下使用正则表达式的类,根据表达式正确有效的文本,但是当符合条件时,不让我转到下一个组件,这是我的错误?

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class VerificarCorreoDAO extends InputVerifier {

    Pattern formato = Pattern.compile("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$ ");
    Matcher mat;
    String texto;
    JLabel lblMensaje;

    @Override
    public boolean verify(JComponent input) {
        if (input instanceof JTextField) {
            texto = ((JTextField) input).getText().trim();
            if (texto.length() == 0) {                
                return false;
            } else if (texto.length() > 0 && texto.length() < 16 || texto.length() > 50) {                
                return false;
            }
        }
        mat = formato.matcher(texto);
        return mat.matches();
    }
}

2 个答案:

答案 0 :(得分:0)

如果输入Component不是JTextField,则formato.matcher会抛出NPE,阻止verify方法返回true。将语句移到if

if (input instanceof JTextField) {
        ....

    return formato.matcher(texto).matches();
} else {
  ...// handle other component types
}  

答案 1 :(得分:0)

变量mattexto是实例字段,但您将它们用作方法变量。将它们移到verify()

public class VerificarCorreoDAO extends InputVerifier {

    Pattern formato = Pattern.compile("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$ ");
    JLabel lblMensaje;

    @Override
    public boolean verify(JComponent input) {
        Matcher mat;
        String texto;
        if (input instanceof JTextField) {
            texto = ((JTextField) input).getText().trim();
            if (texto.length() == 0) {                
                return false;
            } else if (texto.length() > 0 && texto.length() < 16 || texto.length() > 50) {                
                return false;
            }
        }
        mat = formato.matcher(texto);
        return mat.matches();
    }
}

此外,即使尚未设置,您的代码也会尝试使用texto。这可能是个问题。

但这里最可能的问题是正则表达式本身;您有一个输入结束标记$ ,后跟一个空格。没有可能的输入符合该模式。