JS正则匹配邮箱格式

观察一些邮箱格式,有些邮箱格式简单,有些复杂,在网上找了个邮箱的正则表达式,分析一下邮箱的规则。
该表达式:
/^\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】是零个的情况:
[email protected]
[email protected]
[email protected]_egiou_die4355.diouue

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

在写个有两个【2】的情况:
[email protected]
.ergd-eges匹配的是【2】

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

根据表达式应该匹配到的邮箱格式:
[email protected]
[email protected]
[email protected]_egiou_die4355.diouue
[email protected]
[email protected]_343de-eres-edd.34.com

不该匹配到的几种格式:
[email protected](以点开头,不匹配【1】)
der*[email protected](含有*特殊字符,不匹配【1】)
34.cm(不匹配【3】)
[email protected]@.con(不匹配【3】)
[email protected](不匹配【5】)
dao3243(不匹配【3】【5】)

测试代码:

       console.log("----------应该匹配到的----------");
       console.log("[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]"));
       console.log("[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]"));
       console.log("[email protected]_egiou_die4355.diouue,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]_egiou_die4355.diouue"));
       console.log("[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]"));
       console.log("[email protected]_343de-eres-edd.34.com,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]_343de-eres-edd.34.com"));
       console.log("----------不该匹配到的----------");
       console.log("[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]"));
       console.log("der*[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("der*[email protected]"));
       console.log("34.cm,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("34.cm"));
       console.log("[email protected]@.con,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]@.con"));
       console.log("[email protected],结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("[email protected]"));
       console.log("dao3243,结果:"+/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/.test("dao3243"));

图示:

原文地址:https://www.cnblogs.com/huaxie/p/11911192.html

时间: 2024-11-06 03:36:22

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

js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码

直接上代码 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

常用JS正则匹配函数

//校验用户名:只能输入1-30个字母 function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true } //校验密码:只能输入6-20个字母.数字.下划线 function isPasswd(s) { var patrn=/^(/w){6,20}$/; if (!patrn.exec(s)) return false return true } //校验普通

js正则匹配两位小数

今天写一个用js正则校验最多保留两位小数的格式. a = /^\d+|\d+\.\d{1,2}$/; 测试 a.test(1.222); 结果:true 一下蒙了,怎么可能,最后找了好久,原来需要把^和$中间的格式包起来 a = /^(\d+|\d+\.\d{1,2})$/; 测试a.test(1.222); 结果:false 分析:如果不用括号包起来,则匹配^\d+或\d+\.\d{1,2} 1.222一下就匹配了^\d,因为只要以数字开头就匹配嘛 最终从网上找到一个更好的匹配两位小数的正则:

正则匹配邮箱----全

效果图: 加逗号换行,可连续验证 代码: <!DOCTYPE html><html><head> <meta charset="UTF-8"> <script src="../jquery-3.1.0.js" ></script> <title>邮箱验证</title> <style type="text/css"> textarea{ h

js 正则匹配 域名【host】

如果直接在js中是可以直接取到hostname的,以下方式是通过正则匹配: var url = "http://www.cnblogs.com/cench" var reg = /^http(s)?:\/\/(.*?)\// // 必须是http开头或者https开头,结尾为'/' // 把host替换成指定数值 var ToReplace = 'Host/' url.replace(reg, ToReplace) // Host/cench //*******************

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

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>邮箱匹配</title> </head> <body> 手机号:<input type="text" id="texts"><br \> 邮箱:<input type="text" i

正则表达式匹配邮箱格式

#正则表达式判断邮箱格式是否正确 # 分析:[a-zA-Z0-9_]@[a-zA-Z0-9].[a-zA-Z] while 1: import re email=input("请输入邮箱:") # patten=re.compile("^[a-zA-Z0-9]@[a-zA-Z0-9].[a-zA-Z]$") result=re.findall("^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+.[a-zA-Z]+$&qu

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>在此处插入标题</title><script type="tex

正则验证邮箱格式是不是正确

<span style="font-size:14px;">验证该邮箱格式是不是正确</span> <span style="font-size:14px;">public class StringDemo1 { public static void main(String[] args) { /* * 邮箱的正则表达式 * * [a-zA-Z0-9_][email protected][a-zA-Z0-9_]+(\.[a-zA-