正则表达式电子邮件地址验证

时间:2012-09-16 17:10:06

标签: java regex email

有人可以向我解释一下这个java Regex吗?

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)$

此正则表达式用于验证电子邮件地址

2 个答案:

答案 0 :(得分:12)

现在,验证电子邮件地址被视为不良做法(stop validating email addresses with regex),尤其是在您的问题中使用此类表达式。例如,这是一个more complete expression

至于这个表达式,让我们分解它:

匹配字符串的开头

^

匹配列表中的至少一个字符

[a-z0-9!#$%&'*+/=?^_`{|}~-]+

非捕获(see backreference)组,可以重复0..n次,匹配.,然后匹配列表中的至少一个字符。

(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*

只是这个角色

@

非捕获组匹配此列表中的一个字符[a-z0-9],然后可能包含以下列表中的更多字符。匹配字符串必须以[a-z0-9]开头和结尾,里面可以有[a-z0-9 - ]。

(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+

非捕获组,匹配2个大写字母或其中一个单词。

(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)

字符串结束。

$

答案 1 :(得分:3)

^                                       # Beginning of the line
[a-z0-9!#$%&'*+/=?^_`{|}~-]+            # One or more (+) characters from the 
                                        bracket expression, i.e., letters [a-z],
                                        numbers [0-9], !, $, %, et cetera
(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*    # Zero or more (*) of the above
                                        expression, preceded by a dot \\.
@                                       # Literal @
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+ # A digit or a letter, followed by 
                                        optional digits, letters, or dashes, 
                                        followed by a a dot
(?:[A-Z]{2}|com|org|net...)             # Country code ([A-Z]{2}), or a top level
                                        domain, such as com, org, net.
$                                       # End of the line

使用具体示例john@foo.com。电子邮件的第一部分john将与^[a-z0-9!#$%&'*+/=?^_{|}~-]+匹配。 @将匹配@。域foo以及点与(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+匹配。最后,TLD com与替换(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|in|aero|jobs|museum)匹配。