我有一个使用正则表达式来验证电子邮件地址的方法。
public String searchFormail(String searchWord) {
Pattern pattern = Pattern
.compile("([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})");
Pattern pattern2 = Pattern.compile("([\\w\\-]([\\.\\w])+[\\w]+ \\(at\\)([\\w\\-]+\\.)+[A-Za-z]{2,4})");
Matcher matchs = pattern.matcher(searchWord);
Matcher matchs2 = pattern2.matcher(searchWord);
if (matchs.find() || matchs2.find()) {
return searchWord.substring(matchs.start(), matchs.end());
}
return null;
}
第一个问题:如果 searchFormail
将此字符串作为输入“support@ google.com”,请注意 @ 后面的空格。如何替换此空格以使字符串输入变为“support@google.com”。我在正则表达式中尝试了 //s
,但这只是忽略了空格。所以,这没有帮助。
第二个问题:我的第二个模式(使用“google[at]support.com”验证邮件)不起作用。如何改进此正则表达式以获取“google[at]support.com”等电子邮件,使其变为“google@support.com”,例如将“[at]”转换为@。
提前谢谢您。
最佳答案
第一个问题:实际上邮件地址从来不允许空格,所以我会简单地通过类似的方式删除所有空格
searchWord = searchWord.replaceAll("\\s+","")
第二个问题:您的 pattern2
包含空格 ([\\w\\-]([\\.\\w])+[\\w]+_HERE_ARE_WHITESPACES_\\( at\\)([\\w\\-]+\\.)+[A-Za-z]{2,4})
。
因此它找不到邮件地址。
此外,您的模式还会查找“google(at)support.com”等电子邮件格式,而不是“google[at]support.com”。
要将“(at)”替换为实际的“@”,您需要调整模式2并使用replaceFirst方法。 这是适合我的完整代码。我希望它有帮助。
public static String searchFormail(String searchWord) {
searchWord = searchWord.replaceAll("\\s+","");
Pattern pattern = Pattern
.compile("([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})");
Pattern pattern2 = Pattern.compile("([\\w\\-]([\\.\\w])+[\\w]+)(\\(at\\))(([\\w\\-]+\\.)+[A-Za-z]{2,4})");
Matcher matchs = pattern.matcher(searchWord);
Matcher matchs2 = pattern2.matcher(searchWord);
if(matchs.find()){
return searchWord.substring(matchs.start(), matchs.end());
}
else if(matchs2.find()){
return matchs2.replaceFirst("$1@$4");
}
return null;
}
关于Java正则表达式电子邮件替换所有空格和 "[at]"符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910902/