2010-12-21 21 views
21

Jak sprawdzić ciąg, aby upewnić się, że zawiera tylko liczby, litery lub spację?

Odpowiedz

2

Użyj wyrażenia regularnego poniżej w celu potwierdzenia ciąg, aby upewnić się, że zawiera cyfr, liter lub tylko miejsca:

[a-zA-Z0-9 ] 
12
string s = @"$KUH% I*$)OFNlkfn$"; 
var withoutSpecial = new string(s.Where(c => Char.IsLetterOrDigit(c) 
              || Char.IsWhiteSpace(c)).ToArray()); 

if (s != withoutSpecial) 
{ 
    Console.WriteLine("String contains special chars"); 
} 
3

Jeśli lista dopuszczalnych znaków jest bardzo mała, można użyć wyrażenia regularnego podobnego do tego:

Regex.IsMatch(items, "[a-z0-9 ]+", RegexOptions.IgnoreCase); 

Używane tutaj wyrażenie regularne szuka dowolnego znaku z az i 0-9, w tym spacji (co znajduje się w nawiasach kwadratowych []), że istnieje jeden lub więcej z tych znaków (znak + - ty może użyć * dla 0 lub więcej). Ostatnia opcja mówi parserowi regex, aby ignorował wielkość liter.

Nie powiedzie się w przypadku niczego, co nie jest literą, cyfrą lub spacją. Aby dodać więcej znaków do listy szczęścia, dodaj ją w nawiasach kwadratowych.

34

Proste:

function HasSpecialChars(string yourString) 
{ 
    return yourString.Any(ch => ! Char.IsLetterOrDigit(ch)) 
} 
+1

Dlaczego ta odpowiedź nie została poprawiona? Wydaje mi się prawidłowe i szybkie. Lepszy niż zanurzenie się w świecie regex dla tak łatwego problemu –

+0

@MarcelloGrechiLins Regex jest całkowicie poprawny i prawdopodobnie szybszy, gdy używa się skompilowanego Regexa i ponownie go używa w wielu ciągach znaków. Jak zwykle przy tworzeniu oprogramowania istnieją kompromisy. :-) –

+0

Głęboko oddałbym głos - z minimalnym testowaniem, przywraca to prawdę \ n, i wątpię, żeby ktoś tego chciał. Regex przynajmniej ograniczy go do rzeczywistych znaków specjalnych. – Charles

3

Spróbuj w ten sposób.

public static bool hasSpecialChar(string input) 
    { 
     string specialChar = @"\|!#$%&/()=?»«@£§€{}.-;'<>_,"; 
     foreach (var item in specialChar) 
     { 
      if (input.Contains(item)) return true; 
     } 

     return false; 
    }