使用Regex Formatter验证电子邮件

时间:2016-04-03 17:21:53

标签: regex email formatter

这是我的代码,但它不起作用,为什么?我使用RegexFormatter(“ @ 。*”)但似乎无效。它无法检查JFormattedTextField是否 @ 。*包含或不包含。我想在验证标签上显示结果我该怎么办?

public class hw5 extends JFrame {

private JPanel contentPane;
private JPasswordField passwordField;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        public void run() {
            try {
                hw5 frame = new hw5();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
public hw5() {
    setTitle("hw5");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JFormattedTextField FormattedField = new JFormattedTextField(new RegexFormatter("*@*.*"));
}

    }
class RegexFormatter extends DefaultFormatter {
  private Pattern pattern;

  private Matcher matcher;

  public RegexFormatter() {
    super();
  }

public Object stringToValue(String text) throws ParseException {
Pattern pattern = getPattern();

if (pattern != null) {
  Matcher matcher = pattern.matcher(text);

  if (matcher.matches()) {
    setMatcher(matcher);
    return super.stringToValue(text);
  }
  throw new ParseException("Pattern did not match", 0);
}
return text;

}   }

1 个答案:

答案 0 :(得分:0)

你的正则表达式*@*.*如果错了。这意味着:

  • 一个*
  • 后跟零个或多个@
  • 后跟零个或多个字符(任意)

通过正则表达式验证电子邮件是very complicated(如果您想要正确执行)。既然你想要做的就是检查“带有@的东西,我建议使用以下正则表达式:

[^@]+@[^@]+

或者更好:

^[^@]+@.[^@]+$

这意味着:

  • ^:字符串的开头
  • [^@]+:后跟一个或多个非@
  • 的字符
  • @:一个@
  • [^@]+:后跟一个或多个非@
  • 的字符
  • $

这将匹配a@balpha+beta$@^&,但会在fooa@b@c上失败。这是否足够你,我不知道。有far better ways to validate whether an input is an e-mail address