我正在尝试为符合以下条件的用户名编写正则表达式...
必须在6到16个字符之间, 其中任何四个必须是字母(尽管不一定是连续的), 可能还包含字母,数字,破折号和下划线。
因此_1Bobby1_
和-Bo-By19-
将匹配,但_-bo-_
和-123-456_
将不匹配。
我尝试过:
^(?=.*[a-zA-Z].{4})([a-zA-Z0-9_-]{6,16})$
但这似乎不起作用,我在网上看了一下,找不到任何有效的东西,并使用Regexper可视化该表达式并尝试从头开始构建它。
任何指针将不胜感激。
答案 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]函数(如果需要)