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数字和大小写字母组成,-和多余的点都不行,但是这个可用于大部分场景!

  • 44
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Java 通用的邮箱验证正则表达式可以使用以下代码: ```java public static boolean isValidEmail(String email) { String emailRegex = "^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@" + "((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"; Pattern pattern = Pattern.compile(emailRegex); return pattern.matcher(email).matches(); } ``` 该正则表达式可以验证绝大部分常见的邮箱地址,包括带有国际化域名的邮箱地址。 该正则表达式的意义如下: - `^` 表示匹配字符串的开始。 - `(?=.{1,64}@)` 表示在 @ 符号前面匹配 1 到 64 个任意字符。 - `[A-Za-z0-9_-]+` 表示匹配邮箱地址中的用户名,用户名由字母、数字、下划线、减号组成,且至少出现一次。 - `(\\.[A-Za-z0-9_-]+)*` 表示匹配邮箱地址中的域名,域名由一个或多个由点号分隔的字符串组成,每个字符串由字母、数字、下划线、减号组成。 - `((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+` 表示匹配邮箱地址中的域名前缀,由字母、数字、减号组成,且长度为 1 到 63 个字符,不以减号开头或结尾,且由一个或多个由点号分隔的字符串组成。 - `[A-Za-z]{2,6}` 表示匹配邮箱地址中的域名后缀,由字母组成,且长度为 2 到 6 个字符。 - `$` 表示匹配字符串的结尾。 使用正则表达式可以验证绝大部分常见的邮箱地址,但并不能保证验证所有的邮箱地址,因为邮箱地址的格式非常灵活和多变。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值