我有一个电子邮件地址验证正则表达式我在代码中使用了这样的:
public class Test {
public static void main(String[] args) {
try {
String lineIwant = "myname@asl.ramco-group.com";
String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
Boolean b = lineIwant.matches(emailreg);
if (b == false) {
System.out.println("Address is Invalid");
}else if(b == true){
System.out.println("Address is Valid");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
在示例中的此特定电子邮件地址中,布尔值返回false,而这是有效的客户电子邮件地址。
我怀疑这是因为ramco
和group
之间的连字符,因为当我删除它时,布尔值返回true。
如何更改正则表达式以容纳此类电子邮件地址?
答案 0 :(得分:16)
您的正则表达式在-
符号后不允许@
,所以
String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$";
将“修复”此特定问题。但电子邮件地址要复杂得多。使用正则表达式验证它们并不是一个好主意。查看@DuncanJones的评论。
答案 1 :(得分:16)
我建议你不要试图自己解决这个问题。相反,请依赖经过良好测试的解决方案,例如来自EmailValidator
的commons-validator。
例如:
EmailValidator.getInstance().isValid(emailAddressString);
答案 2 :(得分:3)
答案 3 :(得分:2)
在\\-
之后将@
添加到正则表达式字符串的该部分。
\\
告诉Java你不想使用破折号,因为它通常用于显示两个值之间的差异。就这样......
^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9\\-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
<强>更新强>
蒂姆在评论中承认逃避不是必要的!我自己的一个快速提示是,您可能希望使用\w
代替[A-Za-z0-9_]
,这样您就不必一遍又一遍地写这些内容。最后熟悉this site。一旦你开始使用正则表达式,这是一个很好的帮助。