【问题标题】:Email Regex validation in JavaScript allowing characters (#$%&* etc) in middle [duplicate]JavaScript 中的电子邮件正则表达式验证允许在中间使用字符(#$%&* 等)[重复]
【发布时间】:2018-07-13 14:21:39
【问题描述】:

电子邮件格式如下:local_part @ domain_part.com

Local_part & domain_part 不应以特殊字符 (@#&()*,./{}^%[]~`!$ =\|;:? ) 包括连字符 (-)

Local_part & domain_part 只能在中间包含上述特殊字符,如 (#$%&*- 等)。

local_part 的长度限制为 64domain_part 分别为 255 个字符。

domain_part不得包含所有数字

【问题讨论】:

    标签: javascript regex validation email


    【解决方案1】:

    2018 年 7 月 27 日更新

    ^(?![.!#$%&'*+/=?^_`{|}~-])(?:[a-zA-Z0-9]|(?:(?:([.])(?!\1)|[!#$%&'*+/=?^_`{|}~-]))(?!@)){1,64}@(?=.{1,255}$)(?!\d+$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
    

    https://regex101.com/r/dxCmEn/1

     ^                             # BOS
     (?! [.!#$%&'*+/=?^_`{|}~-] )  # Local does not start with one of these
    
     (?:                           # Local
          [a-zA-Z0-9] 
    
       |  
          # Special chars
          # Local does not end with one of these
    
          (?:
               # Option 1
               (?:
                    ( [.] )                       # (1), Not a consecutive special char (specific), add more
                    (?! \1 )                      # 
                 |                              # or,
                    [!#$%&'*+/=?^_`{|}~-]         # One of these other special chars, remove from here
               )
    
               # Option 2
               # |  ( [.!#$%&'*+/=?^_`{|}~-] )     # (1) Not a consecutive same special char 
               #    (?! \1 )                        
    
               # Option 3
               # |  [.!#$%&'*+/=?^_`{|}~-]         # Not a consecutive any special char
               #    (?! [.!#$%&'*+/=?^_`{|}~-] )  
    
               # Option 4, Original
               #  |  [.!#$%&'*+/=?^_`{|}~-]        # Any special char is OK
               #     
    
          )
          (?! @ )
    
     ){1,64}                       # 1 to 64 local characters
    
     @ 
     (?= .{1,255} $ )              # 1 to 255 domain characters
     (?! \d+ $ )                   # Domain must not contain all numbers
    
     [a-zA-Z0-9]                   # Domain
     (?:
          [a-zA-Z0-9-]{0,61} 
          [a-zA-Z0-9] 
     )?
     (?:
          \. 
          [a-zA-Z0-9] 
          (?:
               [a-zA-Z0-9-]{0,61} 
               [a-zA-Z0-9] 
          )?
     )*
     $                             # EOS          
    

    【讨论】:

    • 以上表达式无效....请找到再次更新的确切要求。
    • domain_part may contain above special characters like (#$%&*- etc) in middle only. 这些字符我认为在域部分是非法的。
    • @Sai - 发布了更新的正则表达式。抱歉,我没有考虑域中的那些 特殊 字符。其他一切都适用于您更新的问题。
    • 感谢 sln 提供的信息,经过几次更新后它就可以工作了。
    • @Sai - 如果它解决了你的大部分问题,你应该接受答案。
    【解决方案2】:

    因此,根据您有限的描述,您似乎正在寻找like this?的东西

    这是模式:^(?<localpart>[^-].*[^-])@(?<domainpart>[^-].*[^-])\..{2,3}$

    它将它们保存到命名的捕获组中,并假定 localpart 和 domainpart 都包含至少 2 个字符(它们应该包含)。任何部分都不允许以- 开头或结尾。

    还有其他要求吗?或者这几乎涵盖了它?

    【讨论】:

    • 上述表达式无效....请找到再次更新的确切要求。
    • 感谢 sln 提供的信息,经过几次更新后它就可以工作了。
    • 进一步的增强要求是不允许特殊字符出现在上面的正则表达式中。例如:test....test@gmail.com 是不可接受的,目前它接受提供的正则表达式。你能告诉我哪里需要更新吗?
    猜你喜欢
    • 2011-07-27
    • 2010-10-30
    • 2015-07-04
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2014-12-09
    相关资源
    最近更新 更多