2009-07-25 10 views
146

ho una stringa di input e voglio verificare che contenga:Verifica che una stringa contenga solo lettere in C#

  • solo lettere o
  • solo lettere e numeri o
  • soltanto lettere, numeri o sottolineatura

Per chiarire, ho 3 casi diversi nel codice, ognuno che richiede una convalida diversa. Qual è il modo più semplice per ottenere questo in C#?

risposta

223

solo lettere:

Regex.IsMatch(input, @"^[a-zA-Z]+$"); 

solo lettere e numeri:

Regex.IsMatch(input, @"^[a-zA-Z0-9]+$"); 

solo lettere, numeri e sottolineano:

Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$"); 
+24

Questo presuppone un alfabeto latino, dove Char.IsLetter permette di alfabeti non latini. –

+5

Regex.IsMatch (input, "^ [a-z0-9] + $", RegexOptions.IgnoreCase); –

+3

@TomFobear: questo è più lento di specificare esplicitamente [a-zA-Z] –

3

È possibile effettuare il ciclo sui caratteri di stringa e visualizzate mediante il metodo Char IsLetter , ma si può anche fare un trucco con il metodo String IndexOfAny per cercare altri charaters non sono supponiamo di essere nella stringa.

1

Scorrere stringhe caratteri e funzioni d'uso di 'Char 'chiamato' IsLetter 'e' IsDigit '.

Se hai bisogno di qualcosa di più specifico, usa la classe Regex.

7

penso che sia un buon caso di usare espressioni regolari:

public bool IsAlpha(string input) 
{ 
    return Regex.IsMatch(input, "^[a-zA-Z]+$"); 
} 

public bool IsAlphaNumeric(string input) 
{ 
    return Regex.IsMatch(input, "^[a-zA-Z0-9]+$"); 
} 

public bool IsAlphaNumericWithUnderscore(string input) 
{ 
    return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$"); 
} 
+2

Regex ha metodi statici per questo –

+0

Bello, non me lo ricordavo, nessun VS a portata di mano ... modifica ... – CMS

42

lettere solo:

Regex.IsMatch(theString, @"^[\p{L}]+$"); 

lettere e numeri:

Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$"); 

lettere, numeri e underscore:

Regex.IsMatch(theString, @"^[\w]+$"); 

Nota: questi modelli corrispondono anche ai caratteri internazionali (anziché utilizzare il costrutto a-z).

191
bool result = input.All(Char.IsLetter); 

bool result = input.All(Char.IsLetterOrDigit); 

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_'); 
+3

Sarei curioso di sapere quale più veloce il tuo (LINQ) o quello di Philippe Leybaert (Regex)? – nam

17

Per quelli di voi che preferiscono non andare con Regex e sono su .NET 2.0 quadro (AKA senza LINQ):

solo lettere:

public static bool IsAllLetters(string s) 
{ 
    foreach (char c in s) 
    { 
     if (!Char.IsLetter(c)) 
      return false; 
    } 
    return true; 
} 

solo numeri:

public static bool IsAllDigits(string s) 
    { 
     foreach (char c in s) 
     { 
      if (!Char.IsDigit(c)) 
       return false; 
     } 
     return true; 
    } 

Solo numeri o lettere:

public static bool IsAllLettersOrDigits(string s) 
    { 
     foreach (char c in s) 
     { 
      if (!Char.IsLetterOrDigit(c)) 
       return false; 
     } 
     return true; 
    } 

solo numeri o lettere o underscore:

public static bool IsAllLettersOrDigitsOrUnderscores(string s) 
    { 
     foreach (char c in s) 
     { 
      if (!Char.IsLetterOrDigit(c) && c != '_') 
       return false; 
     } 
     return true; 
    } 
1

Se sei un principiante, allora si può prendere di riferimento dal mio codice .. quello che ho fatto è stato quello di mettere su un assegno in modo che potessi ottenere solo gli alfabeti e spazi bianchi! È possibile ripetere il ciclo dopo la seconda istruzione if per convalidare la stringa di nuovo

 bool check = false; 

     Console.WriteLine("Please Enter the Name"); 
     name=Console.ReadLine(); 

     for (int i = 0; i < name.Length; i++) 
     { 
      if (name[i]>='a' && name[i]<='z' || name[i]==' ') 
      { 
       check = true; 
      } 
      else 
      { 
       check = false; 
      } 

     } 

     if (check==false) 
     { 
      Console.WriteLine("Enter Valid Value"); 
      name = Console.ReadLine(); 
     } 
Problemi correlati