用户名的正则表达式

时间:2019-05-21 12:16:31

标签: asp.net regex

我正在尝试为符合以下条件的用户名编写正则表达式...

必须在6到16个字符之间, 其中任何四个必须是字母(尽管不一定是连续的), 可能还包含字母,数字,破折号和下划线。

因此_1Bobby1_-Bo-By19-将匹配,但_-bo-_-123-456_将不匹配。

我尝试过:

^(?=.*[a-zA-Z].{4})([a-zA-Z0-9_-]{6,16})$

但这似乎不起作用,我在网上看了一下,找不到任何有效的东西,并使用Regexper可视化该表达式并尝试从头开始构建它。

任何指针将不胜感激。

2 个答案:

答案 0 :(得分:3)

This正则表达式可用于验证用户名

^(?=.{6,16}$)(?=(?:.*[A-Za-z]){4})[\w-]+$

正则表达式细分

^ #Start of string
(?=.{6,16}$) #There should be between 6 to 16 characters
  (?=
    (?:.*[A-Za-z]){4} # Lookahead to match 4 letter anywhere in string
  )
[\w-]+ #If above conditions are correct, match the string. It should only contain dgits, alphabets and dash
$ #End of string. Not necessary as the first check (?=.{6,16}$) itself does that

答案 1 :(得分:0)

bool IsValid(string userName)
{
    return userName.Length >= 6 && userName.Length <= 16 && userName.Count(s => char.IsLetter(s)) >= 4;
}

不使用正则表达式会更简单。

众所周知,您可以使用其他char.is [something]函数(如果需要)