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]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

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

原创文章 19 获赞 26 访问量 9202

猜你喜欢

转载自blog.csdn.net/qq_36270361/article/details/106120936