2011-12-02 19 views
5

Potrzeba wyrażenia regularnego sprawdzania poprawności nazwy użytkownika, który:Potrzeba wyrażenia regularnego sprawdzania poprawności nazwy użytkownika

  1. powinny umożliwić spacje, ale nie spacji między znakami
  2. musi zawierać co najmniej jedną literę, może zawierać litery i cyfry
  3. 7-15 znaków max (alfanumeryczny)
  4. nie może zawierać znaki specjalne
  5. podkreślenia pozostawia

Nie wiesz, jak to zrobić. Każda pomoc jest doceniana. Dziękuję Ci.

To właśnie używałem ale pozwala przestrzeni pomiędzy znakami

"(?=.*[a-zA-Z])[a-zA-Z0-9_]{1}[_a-zA-Z0-9\\s]{6,14}" 

Przykład: nazwa użytkownika brak spacji w nazwie użytkownika

+0

Dlaczego musisz używać jednego wyrażenia regularnego do tego? Często kilka linii kodu jest lepszych niż pojedyncze zniekształcone wyrażenie regularne. Dopuszczanie spacji końcowych wydaje się dziwne; czy w rzeczywistości są częścią nazwy użytkownika, czy też są ignorowane? Czy naprawdę chcesz traktować "fred" i "fred" jako odrębne? Czy spacje końcowe liczą się do maksymalnej długości 7-15? Czy nazwa użytkownika musi składać się co najmniej z * 7 znaków, czy też istnieje zmienna maksymalna długość, która może wynosić od 7 do 15 (i na podstawie czego)? Czym dokładnie są "znaki specjalne"? Czy "123_456" jest prawidłowe (tj. Czy podkreślenie jest liczone jako litera dla celów reguły 2)? –

Odpowiedz

4

Spróbuj tego:

foundMatch = Regex.IsMatch(subjectString, @"^(?=.*[a-z])\w{7,15}\s*$", RegexOptions.IgnoreCase); 

Czy zezwala również na używanie _, ponieważ zezwoliłeś na to przy próbie.

Więc w zasadzie używam trzech zasad. Jeden do sprawdzenia, czy istnieje co najmniej jedna litera. Kolejny, aby sprawdzić, czy ciąg składa się wyłącznie z alfów plus _ i wreszcie akceptuję końcowe spacje i co najmniej 7 z maksimum 15 znaków alfy. Jesteś na dobrej drodze. Tak trzymać i będzie odpowiadał na pytania tutaj też :)

Podział:

" 
^   # Assert position at the beginning of the string 
(?=   # Assert that the regex below can be matched, starting at this position (positive lookahead) 
    .  # Match any single character that is not a line break character 
     *  # Between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
    [a-z] # Match a single character in the range between “a” and “z” 
) 
\w   # Match a single character that is a “word character” (letters, digits, etc.) 
    {7,15} # Between 7 and 15 times, as many times as possible, giving back as needed (greedy) 
\s   # Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) 
    *  # Between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
$   # Assert position at the end of the string (or before the line break at the end of the string, if any) 
" 
+0

Cześć. Powyższe wyrażenie nadal zawiera spację między znakami. – 1078081

+0

@ user1078081 Tak? Czy możesz mi wyjaśnić, jak to jest możliwe? – FailedDev

+0

To pokazuje nieprawidłową sekwencję ucieczki (ważne są te \ b \ t \ n \ f \ r \”\” \) wzór błąd składni. Jak mogę to naprawić. – 1078081

Powiązane problemy