观察一些邮箱格式,有些邮箱格式简单,有些复杂,在网上找了个邮箱的正则表达式,分析一下邮箱的规则。
该表达式:
/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/

拆分:
【1】/^\w+
以英文,数字,下划线开头,(一个或多个。)
【2】([\.\-]\w+)*
跟着点或中线任意一个,然后再跟着的英文、数字、下划线(一个或多个)。
这个整个部分用圆括号括起来,可以零个一个或多个。(可有可无,可多个)
【3】\@\w+
跟着一个@符号,后面英文、数字、下划线(一个或多个)
【4】([\.\-]\w+)*
跟着点或中线任意一个,然后再跟着的英文、数字、下划线(一个或多个)。
这个整个部分用圆括号括起来,可以零个一个或多个。(可有可无,可多个)
【5】\.\w+
跟着一个点,后面跟着英文、数字、字母、下划线(一个或多个)

整个表达式没有|或这种情况,所以就是一个从左到右的整体。其中有两个一样的部分【2】和【4】都是*,*代表零个一个或多个,是可有可无,这里面有两个*的地方。可以用匹配简单邮箱和复杂邮箱。
这两个可有可无的部分,一个在@符号前面,一个在@符号后面,这个组合是点或中线,加至少一个字母下划线英文的组合。
根据这个组合写几个情况例如:
这个组合不存在
.a(一个点后面跟着一个字母)
.abc.abc(这个组合有两个)
-34dvd-dege-derg(三个以-开头的组合)
.adf-dreg.der(两个以.开头带数字的,一个以短线开头带数字的)
这两个部分的数量词是星号,可有可无。

根据该表达式,先写最简单,这两个部分【2】和【4】是零个的情况:
55448934@dd.com
tayood@sod.comm
_ete_derg3748edfe@_egiou_die4355.diouue

5544893、tayood、_ete_derg3748edfe匹配【1】
@dd、@sod、@_egiou_die4355匹配【3】
.com、.comm、.diouue匹配的【5】

在写个有两个【2】的情况:
dged_derw.ergd-eges@doud.sed
.ergd-eges匹配的是【2】

写个有三个个【2】和三个【4】的情况
dsfe_derd.erg.erd23_we-derw@_343de-eres-edd.34.com
.erg.erd23_we-derw匹配的是【2】
-eres-edd.34批评的是【4】
最后一个虽然也是点加数字字母下划线的组合,但是.com是【5】匹配的,因为【5】的是必须存在的,不是可有可无的。

根据表达式应该匹配到的邮箱格式:
55448934@dd.com
tayood@sod.comm
_ete_derg3748edfe@_egiou_die4355.diouue
dged_derw.ergd-eges@doud.sed
dsfe_derd.erg.erd23_we-derw@_343de-eres-edd.34.com

不该匹配到的几种格式:
.derg@dfo.com(以点开头,不匹配【1】)
der*g@dfo.com(含有*特殊字符,不匹配【1】)
34.cm(不匹配【3】)
der.34@@.con(不匹配【3】)
dwll@dooe(不匹配【5】)
dao3243(不匹配【3】【5】)

测试代码:

       console.log("----------应该匹配到的----------");
console.log("55448934@dd.com,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("55448934@dd.com"));
console.log("tayood@sod.comm,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("tayood@sod.comm"));
console.log("_ete_derg3748edfe@_egiou_die4355.diouue,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("_ete_derg3748edfe@_egiou_die4355.diouue"));
console.log("dged_derw.ergd-eges@doud.sed,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("dged_derw.ergd-eges@doud.sed"));
console.log("dsfe_derd.erg.erd23_we-derw@_343de-eres-edd.34.com,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("dsfe_derd.erg.erd23_we-derw@_343de-eres-edd.34.com"));
console.log("----------不该匹配到的----------");
console.log(".derg@dfo.com,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test(".derg@dfo.com"));
console.log("der*g@dfo.com.com,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("der*g@dfo.com.com"));
console.log("34.cm,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("34.cm"));
console.log("der.34@@.con,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("5der.34@@.con"));
console.log("dwll@dooe,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("dwll@dooe"));
console.log("dao3243,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("dao3243"));

图示:

JS正则匹配邮箱格式的更多相关文章

  1. js正则验证邮箱格式

    首先总结一下邮箱的格式,邮箱由@分隔,左侧为用户名,右侧为邮箱域名,用户名可以由字母.数字._.-以及.组成,但是必须是以字母或数字开头,邮箱的域名是由字母.数字.-和.组成的,但是必须以.加上字母的 ...

  2. 在js中实现邮箱格式的验证

    在js中实现邮箱格式的验证 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><htm ...

  3. js正则匹配的一个日常应用

    应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...

  4. JS正则密码复杂度校验之:JS正则匹配半角英文符号

    概述 在JS密码校验中常常会遇到密码强度的校验需求,借用一位朋友提问的图,他在工作中遇到的一个比较经典的密码强度校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验 ...

  5. 【php正则】php正则匹配UTF-8格式的中文汉字 和 【,】【,】【。】等符号

    1.php正则匹配UTF-8格式的中文汉字 和 [,][,][.]等符号 if (preg_match_all("/([\x{4e00}-\x{9fa5}]+((,)?)+((,)?)+(( ...

  6. js判断手机邮箱格式(正则)

    function fun() { var realname = document.getElementById("realname"); var telephone = docum ...

  7. js正则匹配两位小数

    今天写一个用js正则校验最多保留两位小数的格式. a = /^\d+|\d+\.\d{1,2}$/; 测试 a.test(1.222); 结果:true 一下蒙了,怎么可能,最后找了好久,原来需要把^ ...

  8. js 正则表达式,匹配邮箱/手机号/用户名

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. js 正则匹配 域名【host】

    如果直接在js中是可以直接取到hostname的,以下方式是通过正则匹配: var url = "http://www.cnblogs.com/cench" var reg = / ...

随机推荐

  1. PostgreSQL 锁机制浅析

    锁机制在 PostgreSQL 里非常重要 (对于其他现代的 RDBMS 也是如此).对于数据库应用程序开发者(特别是那些涉及到高并发代码的程序员),需要对锁非常熟悉.对于某些问题,锁需要被重点关注与 ...

  2. WSAStartup() - 使用方法

    当一个应用程序调用WSAStartup函数时, 操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中. 以后应用程序就可以调用所请求的Socket库 ...

  3. DP(第三版(较简单))

    突然很想找点DP题(被虐虐) 前言 我竟然还能想起来当时是怎么做的233,题都是随便找的,跟以前的代码重了就重了吧,反正风格变了qaq [2017-11-18]其实本来打算写好多好多的水题来着,不过要 ...

  4. 洛谷 P3367 并查集模板

    #include<cstdio> using namespace std; int n,m,p; ]; int find(int x) { if(father[x]!=x) father[ ...

  5. 洛谷P5506 封锁

    题目 一道模拟题,问题不是很大,主要需要读题清晰,且算法的操作顺序要搞明白,比如在每一秒的开始,所有无人机先移动,然后再一步一步操作. 然后就是判断方向是否一致了,细节还是很多的. #include ...

  6. AspNetCore3.0 和 JWT

    添加NuGet引用 IdentityModel Microsoft.AspNetCore.Authorization.JwtBearer 在appsettings.json中添加JwtBearer配置 ...

  7. Linux下的crontab定时执行任务命令

    0x00 简介 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的 ...

  8. 【洛谷】P2261 [CQOI2007]余数求和

    题面?? 点我获得题面QAQ 我这个咕儿终于在csp初赛前夕开始学习数论了! 我是绝对不会承认之前不学数学是因为去年刚开始学OI的时候就跟yyq他们学莫比乌斯反演然后自闭的 分析 对于k mod i, ...

  9. 【洛谷】P3537 [POI2012]SZA-Cloakroom

    题目描述  有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).  再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:  1. ...

  10. Docker镜像使用

    当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 下面我们来学习: 1.管理和使用本地 Docker ...