Регулярное выражение для имени пользователя

Я пытаюсь написать регулярное выражение для имени пользователя, которое соответствует следующим критериям...

Должно быть от 6 до 16 символов, любые 4 из которых должны быть буквами (хотя и не обязательно последовательными). Может также содержать буквы, цифры, тире и подчеркивание.

Таким образом, _1Bobby1_ и -Bo-By19- будут совпадать, а _-bo-_ и -123-456_ — нет.

Я пробовал:

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

Но это, похоже, не работает, я искал в Интернете и не мог найти ничего, что работало бы, и использовал Regexper для визуализации выражения и попытки построить его с нуля.

Любые указатели будут очень признательны.


person John Palpatine    schedule 21.05.2019    source источник


Ответы (2)


Это регулярное выражение можно использовать для проверки имени пользователя

^(?=.{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
person rock321987    schedule 21.05.2019
comment
Работает отлично и подробный и хорошо объясненный ответ. - person John Palpatine; 21.05.2019
comment
Не был уверен, как это сделать, просто согласился. Еще раз спасибо за это. - person John Palpatine; 22.05.2019

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

Проще не использовать регулярные выражения.

И, как известно, вы можете использовать другие функции char.Is[something], если вам это нужно.

person feihoa    schedule 21.05.2019
comment
Это также будет соответствовать именам пользователей, таким как abcd__**.. OP хочет сопоставить только буквенно-цифровые и - - person rock321987; 21.05.2019
comment
Он может использовать другие функции char.Is[Something] самостоятельно - person feihoa; 21.05.2019
comment
Бесполезно для проверки на стороне клиента, поэтому я спросил о регулярных выражениях. - person John Palpatine; 21.05.2019