Регулярное выражение для имени пользователя - PullRequest
1 голос
/ 21 мая 2019

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

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

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

У меня естьпробовал:

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

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

^(?=.{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
0 голосов
/ 21 мая 2019
bool IsValid(string userName)
{
    return userName.Length >= 6 && userName.Length <= 16 && userName.Count(s => char.IsLetter(s)) >= 4;
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...