Как мне проверить, что строка на английском? - PullRequest
18 голосов
/ 15 февраля 2010

Я читаю строку из консоли. Как мне убедиться, что он содержит только английские символы и цифры?

Ответы [ 13 ]

0 голосов
/ 15 февраля 2010

Если я не хочу использовать RegEx и просто предоставить альтернативное решение, вы можете просто проверить ASCII-код каждого символа и, если он находится между этим диапазоном, это будет либо английская буква, либо число не лучшее решение):

foreach (char ch in str.ToCharArray()) 
{ 
    int x = (int)char;
    if (x >= 63 and x <= 126) 
    {
       //this is english letter, i.e.- A, B, C, a, b, c...
    }
    else if(x >= 48 and x <= 57)
    {
       //this is number
    }
    else
    {
       //this is something diffrent
    }

} 

http://en.wikipedia.org/wiki/ASCII для полной таблицы ASCII.

Но я все еще думаю, что RegEx - лучшее решение.

0 голосов
/ 15 февраля 2010

Примерно так (если вы хотите контролировать ввод):

static string ReadLettersAndDigits() {
    StringBuilder sb = new StringBuilder();
    ConsoleKeyInfo keyInfo;
    while ((keyInfo = Console.ReadKey(true)).Key != ConsoleKey.Enter) {
        char c = char.ToLower(keyInfo.KeyChar);
        if (('a' <= c && c <= 'z') || char.IsDigit(c)) {
            sb.Append(keyInfo.KeyChar);
            Console.Write(c);
        }
    }
    return sb.ToString();
}
0 голосов
/ 15 февраля 2010
bool AllAscii(string str)
{ 
   return !str.Any(c => !Char.IsLetterOrDigit(c));
}
...