正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),能够用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。html

元字符

因为 \ 和 " 或者 ’ 组合没法显示出来,因此下面的内容尽量的加了一个空格。java

字符

描述

\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘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_]’。

固然不止上面那么少的元字符,只列出来用到的,还有不少元字符,包括普通字符、非打印字符、特殊字符、限定符、定位符等。若是想要了解更多关于这方面的知识,能够点这里。正则表达式 - 教程web

电子邮箱格式验证

在网络中,电子邮箱能够自动接收网络任何电子邮箱所发的电子邮件,并能存储规定大小的等多种格式的电子文件。电子邮箱具备单独的网络域名,其电子邮局地址在@后标注,电子邮箱通常格式为:用户名@域名。正则表达式

—个完整的Internet邮件地址由如下两个部分组成,格式以下:登陆名@主机名.域名

中间用—个表示“在”(at)的符号“@”分开,符号的左边是对方的登陆名,右边是完整的主机名,它由主机名与域名组成。其中,域名由几部分组成,每一部分称为一个子域(Subdomain),各子域之间用圆点“.”隔开,每一个子域都会告诉用户一些有关这台邮件服务器的信息。express

从上面的描述就能够看出来,电子邮箱的格式范围很广,惟一比较明显的限制可能就是只有一个"@"符号,可是这并不表明咱们能胡来,根据国内一些企业邮箱对于注册邮箱帐号的限制,列了几条比较通用的电子邮箱格式限制:bash

“@”的左边限制:服务器

由a~z的英文字母(不区分大小写)开头

可由英文字母、0~9的数字、点、减号或下划线组成

长度为3~18个字符

不能以点、减号结尾

“@”的左边限制

正则表达式

英文字母、0~9的数字、下划线

\w+

减号、点

[-.]

长度为3~18个字符

{3,18}

不能以点、减号或下划线结尾

[-.][A-Za-z0-9]+

将上面的正则表达式按照必定的逻辑链接起来:网络

(\w+([-.][A-Za-z0-9]+)*){3,18}

至于用到了 ( )*,表明这里面的字符串可能会出现,也可能不出现。而 + 表明必定出现一次。dom

“@”的右边限制:svg

只能有一个点,点和"@"之间不能为空

可由英文字母、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 校验邮箱格式 非正则 java中邮箱的正则表达式_java 校验邮箱格式 非正则

若是以为上面的正则表达式太复杂,范围太广了,能够用下面这个:

[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

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