JAVA 电子邮箱格式验证,使用正则表达式
正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
元字符
由于 \ 和 " 或者 ’ 组合无法显示出来,所以下面的内容尽可能的加了一个空格。
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ’ \ \ ’ 匹配 " \ " 而 “\ (” 则匹配 " ("。 |
^ | 匹配输入字符串的开始位置。 |
$ | 匹配输入字符串的结束位置。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。请注意在逗号和两个数之间不能有空格。 |
. | 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像"(.I\n)"的模式。 |
(pattern) | 匹配 pattern 并获取这一匹配 。 |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。 |
当然不止上面那么少的元字符,只列出来用到的,还有很多元字符,包括普通字符、非打印字符、特殊字符、限定符、定位符等。如果想要了解更多关于这方面的知识,可以点这里。正则表达式 - 教程
电子邮箱格式验证
在网络中,电子邮箱可以自动接收网络任何电子邮箱所发的电子邮件,并能存储规定大小的等多种格式的电子文件。电子邮箱具有单独的网络域名,其电子邮局地址在@后标注,电子邮箱一般格式为:用户名@域名。
—个完整的Internet邮件地址由以下两个部分组成,格式如下:登录名@主机名.域名
中间用—个表示“在”(at)的符号“@”分开,符号的左边是对方的登录名,右边是完整的主机名,它由主机名与域名组成。其中,域名由几部分组成,每一部分称为一个子域(Subdomain),各子域之间用圆点“.”隔开,每个子域都会告诉用户一些有关这台邮件服务器的信息。
从上面的描述就可以看出来,电子邮箱的格式范围很广,唯一比较明显的限制可能就是只有一个"@"符号,但是这并不代表我们能胡来,根据国内一些企业邮箱对于注册邮箱账号的限制,列了几条比较通用的电子邮箱格式限制:
“@”的左边限制:
- 由a~z的英文字母(不区分大小写)开头
- 可由英文字母、0~9的数字、点、减号或下划线组成
- 长度为3~18个字符
- 不能以点、减号结尾
“@”的左边限制 | 正则表达式 |
---|---|
英文字母、0~9的数字、下划线 | \w+ |
减号、点 | [-.] |
长度为3~18个字符 | {3,18} |
不能以点、减号或下划线结尾 | [-.][A-Za-z0-9]+ |
将上面的正则表达式按照一定的逻辑连接起来:
(\w+([-.][A-Za-z0-9]+)*){3,18}
至于用到了 ( )*,代表这里面的字符串可能会出现,也可能不出现。而 + 代表一定出现一次。
“@”的右边限制:
- 只能有一个点,点和"@"之间不能为空
- 可由英文字母、0~9的数字、点、减号或下划线组成
- 不能以点、减号或下划线结尾
“@”的右边限制 | 正则表达式 |
---|---|
英文字母、0~9的数字、下划线 | \w+ |
只能有一个点,点和"@"之间不能为空 | @\w+([-.][A-Za-z0-9]+)* \. |
减号、点 | [-.] |
不能以点、减号或下划线结尾 | [-.][A-Za-z0-9]+ |
将上面的正则表达式按照一定的逻辑连接起来:
@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*
So,将这两段正则表达式连起来就是验证电子邮箱的正则表达式了:
^(\w+([-.][A-Za-z0-9]+)*){3,18}@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*$
以"^“开始,以”$"结束。
JAVA代码实现:
public static boolean isValidEmail(String email) {
if ((email != null) && (!email.isEmpty())) {
return Pattern.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", email);
}
return false;
}
测试结果截图:
如果觉得上面的正则表达式太复杂,范围太广了,可以用下面这个:
[a-zA-Z0-9]aaa@qq.com[a-zA-Z0-9]+\.[a-zA-Z0-9]+
只能是0-9数字和大小写字母组成,-和多余的点都不行,但是这个可用于大部分场景!
上一篇: 希尔排序—Shell