我有一个编辑框。我正在检查输入的电子邮件地址是否有效。
Pattern pattern1 = Pattern.compile("^[\\w-]*@[\\.\\w-]*$");
Pattern pattern2 = Pattern.compile("^\\w+$");
Matcher matcher1 = pattern1.matcher(string);
Matcher matcher2 = pattern2.matcher(string);
return matcher1.matches();
return matcher2.matches();
如果我输入的电子邮件地址为spunker.baba@foo.com,则会出现此问题。匹配器返回false。它认为char“。”无效。
我应该如何修改我的代码,使其支持“。”和匹配器返回true。
答案 0 :(得分:3)
目前尚不清楚为什么你有两个模式(和两个返回语句!)而不是一个......但你的第一个模式在@符号之前只包括\w
和-
,尽管它之后允许.
。这很容易修改,因此第一部分与第二部分相同:
Pattern pattern1 = Pattern.compile("^[\\.\\w-]*@[\\.\\w-]*$");
但是,有很多网站提供了更准确的电子邮件地址匹配正则表达式模式 - 例如this one in Perl(我怀疑它会简单地移植到Java)。还有一个带有fairly long explanation and Java code的页面,如果您还要处理包含友好名称的地址。我敢肯定,如果你四处搜索,你会发现一个符合你确切需求的模式 - 尽管你如何判断哪些页面是可靠的是另一回事。
编辑:如果你想在没有最后一部分的情况下进行匹配,你可以将它设为可选:
Pattern pattern1 = Pattern.compile("^[\\.\\w-]*(@[\\.\\w-]*)?$");
答案 1 :(得分:0)
Pattern.compile("^[\\w-\.]*@[\\.\\w-]*$")
请注意,此模式将匹配无效字符串(假设@
不是有效的电子邮件地址)。它也不会匹配其他有效的电子邮件地址(即name+other@gmail.com
)