这是我的代码,但它不起作用,为什么?我使用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;
} }
答案 0 :(得分:0)
你的正则表达式*@*.*
如果错了。这意味着:
*
@
通过正则表达式验证电子邮件是very complicated(如果您想要正确执行)。既然你想要做的就是检查“带有@
”的东西,我建议使用以下正则表达式:
[^@]+@[^@]+
或者更好:
^[^@]+@.[^@]+$
这意味着:
^
:字符串的开头[^@]+
:后跟一个或多个非@
@
:一个@
[^@]+
:后跟一个或多个非@
$
这将匹配a@b
和alpha+beta$@^&
,但会在foo
或a@b@c
上失败。这是否足够你,我不知道。有far better ways to validate whether an input is an e-mail address。