UserName的正则表达式

时间:2015-09-11 16:44:56

标签: regex validation username

你可以帮我创建具有以下规则的正则表达式。

  1. 字符串的开头和结尾没有任何特殊字符
  2. 允许的特殊字符为@-_
  3. 字符串中不允许2个特殊字符(即Test..dsTest_@ds
  4. 字符串最多可包含4个特殊字符
  5. 字符串最多可包含4个数字(0-9)
  6. 字符串最小长度为8,最大为50
  7. 我尝试了下面的正则表达式,但我不知道如何将其限制为四位数。

     ^[a-zA-Z0-9]((?!(\.|))|\.(?!(_|\.))|[a-zA-Z0-9]){6,18}[a-zA-Z0-9]$
    

    示例:

    有效字符串:

    1. User.Name_77
    2. 01User_Name_77
    3. UserNameTest
    4. U_ser@Na_m_e
    5. 无效字符串

      1. User_Name012345
      2. User__Name
      3. User.@Name
      4. @UserName77
      5. UserName77@
      6. U_ser@@Na_me
      7. U_ser@-Na_me

2 个答案:

答案 0 :(得分:1)

你有一个很好的规范;您几乎可以直接将其转录为正面和负面的展望(根据评论更新):

^
(?!.*[-@_.]{2})           # no two special in a row
(?!(?:.*[-@_.]){5})       # less than 5 specials
(?!(?:.*\d){5})           # less than 5 digits
(?!^[^a-zA-Z0-9])          # no special at start
(?=.*[a-zA-Z0-9]$)         # no specail at end
([-@_.a-zA-Z0-9]{8,50})    #8 to 50 of that char set
$

Demo

答案 1 :(得分:0)

试试这个:

/^(?!(([A-Za-z0-9]+[\@\.\-\_]){5,}|[A-Za-z0-9]*[\@\.\-\_]{5,}|.{51,}$|.{0,7}$|(.*\d){5,}|.+[\@\.\-\_]{2,}))\b[A-Za-z0-9@._-]*\b$/g

https://regex101.com/r/jX3jS4/7