欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA 电子邮箱格式验证,使用正则表达式

程序员文章站 2022-07-08 13:21:04
...

正则表达式

正则表达式(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;
    }

测试结果截图:
JAVA 电子邮箱格式验证,使用正则表达式

如果觉得上面的正则表达式太复杂,范围太广了,可以用下面这个:

[a-zA-Z0-9]aaa@qq.com[a-zA-Z0-9]+\.[a-zA-Z0-9]+

只能是0-9数字和大小写字母组成,-和多余的点都不行,但是这个可用于大部分场景!