Самый простой способ проверить базовую латинскую букву (A-Z) - PullRequest
5 голосов
/ 31 января 2012

Может быть, я упускаю что-то очевидное, но есть ли более простой способ проверить, является ли символ базовой латинской буквой (az), кроме преобразования в строку и использования Regex ?: Например:

public static bool IsBasicLetter(Char c) {
    return Regex.IsMatch(c.ToString(), "[a-z]", RegexOptions.IgnoreCase);
}

Char.IsLetter соответствует сотням букв из множества алфавитов.Я мог бы непосредственно проверить кодовые точки, но это кажется отрывочным:

public static bool IsBasicLetter(Char c) {
    int cInt = c;
    return !(cInt < 65 || cInt > 122 || (cInt > 90 & cInt < 97));
}

Ответы [ 3 ]

14 голосов
/ 31 января 2012

Ваш второй бит кода выглядит намного лучше, если вы используете символьные литералы:

public static bool IsBasicLetter(char c) {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
2 голосов
/ 31 января 2012

Если вы когда-нибудь захотите сделать его немного более сложным, например, подмножество AZ и несколько других символов (т. Е. Проверить допустимые символы Base64), рассмотрите возможность использования массива логических флагов для первых 127 или 255 символов с true для символов, которые выхотите разрешить в вашем методе IsBasicLetter.Именно так большинство библиотек на самом деле реализуют этот тип функций.

Для более дружественных Юникоду методов проверки символов (явно вне рамок вопроса) проверьте методы класса Char, такие как IsLetterOrDigit, который проверяет все возможные варианты букв.

2 голосов
/ 31 января 2012

Как насчет этого?

return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z');
...