Javascript 电子邮件正则表达式-已排除的指定集

Javascript 电子邮件正则表达式-已排除的指定集,javascript,regex,email,Javascript,Regex,Email,今天我研究正则表达式已经有六个小时了。为了我的生命,我无法理解它。我试过一百种不同的方法,但都没有用。非常感谢您的帮助 基本规则: 1-排除地址部分(在@符号之前)中的这些字符:“()@,;:\[]*&^%$\!{}/” 2-地址可以包含“.”,但不能一行包含两个 对于第一条规则,我有一个优雅的解决方案,然而,第二条规则却要了我的命!这是我到目前为止所拥有的。(为了简单起见,我只将@符号前的部分包括在内)。另外,需要注意的是,这个正则表达式正在JavaScript中使用,因此不允许使用条件IF

今天我研究正则表达式已经有六个小时了。为了我的生命,我无法理解它。我试过一百种不同的方法,但都没有用。非常感谢您的帮助

基本规则:

1-排除地址部分(在@符号之前)中的这些字符:
“()@,;:\[]*&^%$\!{}/”

2-地址可以包含“.”,但不能一行包含两个

对于第一条规则,我有一个优雅的解决方案,然而,第二条规则却要了我的命!这是我到目前为止所拥有的。(为了简单起见,我只将@符号前的部分包括在内)。另外,需要注意的是,这个正则表达式正在JavaScript中使用,因此不允许使用条件IF

/^[^()<>@,;:\\[\]*&^%$#!{}//]+$/
/^[^()@;:\\[\]*&^%$\\!{}/]+$/

首先,我建议您始终选择要允许的字符,而不是相反的字符,因为您永远不知道可能会错过哪些危险字符

其次,这是我经常用来验证电子邮件的正则表达式,它工作得非常好。希望它能帮助你

/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i

首先,我建议你总是选择你想允许的角色,而不是相反的角色,你永远不知道你会错过什么危险的角色

其次,这是我经常用来验证电子邮件的正则表达式,它工作得非常好。希望它能帮助你

/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i
规则2

/^(?:\.?[^.])+\.?$/
这意味着任意数量的序列(一个可选点后接一个强制性非点),末尾有一个可选点

考虑四个两字符序列

  • xx
    匹配为两个非点字符
  • .x
    匹配为可选点,后跟非点
  • x.
    匹配为一个非点,后面是一个可选点
  • 不匹配,因为第一个点后没有非点 关于电子邮件地址,需要记住的一点是,圆点可能会出现在棘手的地方

    "..@"@.example.com
    
    是一个有效的电子邮件地址

    “.@”
    是一个完全有效的引用本地零件生产,
    .example.com
    只是表示
    example.com
    的一种方式,但根据根DNS解析,而不是使用主机搜索路径
    example.com
    可能解析为
    example.com.myintranet.com
    如果
    myintranet.com
    位于主机搜索路径上,但
    .example.com
    始终解析为绝对主机
    example.com

    规则编号2

    /^(?:\.?[^.])+\.?$/
    
    这意味着任意数量的序列(一个可选点后接一个强制性非点),末尾有一个可选点

    考虑四个两字符序列

  • xx
    匹配为两个非点字符
  • .x
    匹配为可选点,后跟非点
  • x.
    匹配为一个非点,后面是一个可选点
  • 不匹配,因为第一个点后没有非点 关于电子邮件地址,需要记住的一点是,圆点可能会出现在棘手的地方

    "..@"@.example.com
    
    是一个有效的电子邮件地址


    “.@”
    是一个完全有效的引用本地零件生产,
    .example.com
    只是表示
    example.com
    的一种方式,但根据根DNS解析,而不是使用主机搜索路径
    example.com
    可能解析为
    example.com.myintranet.com
    如果
    myintranet.com
    位于主机搜索路径上,但
    。example.com
    始终解析为绝对主机
    example.com

    首先,根据您的规范:

    ^(?![\s\S]*\.\.)[^()<>@,;:\\[\]*&^%$#!{}/]@.*$
    
    ^(?![\s\s]*\.\.\)[^()@;:\\[\]*&^%$\\!{}/@*$
    
    这只是你的正则表达式,前面钉着
    (?!.\.\)
    。这是一个负的前瞻,如果字符串中任何地方有任何两个连续的句点,则不匹配


    然而,正确匹配电子邮件地址要困难得多

    首先,根据您的要求:

    ^(?![\s\S]*\.\.)[^()<>@,;:\\[\]*&^%$#!{}/]@.*$
    
    ^(?![\s\s]*\.\.\)[^()@;:\\[\]*&^%$\\!{}/@*$
    
    这只是你的正则表达式,前面钉着
    (?!.\.\)
    。这是一个负的前瞻,如果字符串中任何地方有任何两个连续的句点,则不匹配


    然而,正确匹配电子邮件地址要困难得多

    regex可能不是您想要的,因为识别有效电子邮件的regex是这样的:@SJuan76:这是用于没有注释的电子邮件。它也适用于过时的(两次)RFC。@Porges你能给我指一下当前版本的正则表达式吗?我很好奇:-)@SJuan76:这取决于你的正则表达式引擎。完整的电子邮件地址格式不是常规格式(它可以包含任意嵌套的括号),因此您必须使用正则表达式引擎的非常规功能。我在这里为.NET做了一个:@SJuan76,RFC 2822废弃的RFC 822.regex可能不是您想要的,因为识别有效电子邮件的regex是这样的:@SJuan76:这是用于没有注释的电子邮件。它也适用于过时的(两次)RFC。@Porges你能给我指一下当前版本的正则表达式吗?我很好奇:-)@SJuan76:这取决于你的正则表达式引擎。完整的电子邮件地址格式不是常规格式(它可以包含任意嵌套的括号),因此您必须使用正则表达式引擎的非常规功能。我在这里为.NET做了一个例子:@SJuan76,RFC 2822淘汰了RFC 822。在JavaScript中,
    /^(?。*\.\)[^();:\\[\]*&^%$\\\\\.!{}/]+@.$/
    将匹配
    “\n..@
    ,因为
    不匹配换行符。JavaScript中没有
    s
    标志来更改
    的行为。是的,这有点恶心。你可以用
    [\s\s]
    替换
    。这样更好一些,我会用它。在JavaScript中,
    /^(?。.*.\)[^(),;:\[\]*&^%$$\\\!{}/]+.$/
    将匹配
    “\n..@
    ,因为
    与l不匹配