Как я могу проверить, содержит ли строка только шестнадцатеричные символы в C #? - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть длинная строка (8000 символов), которая должна содержать только шестнадцатеричные и символы новой строки.

Каков наилучший способ проверки / подтверждения того, что строка не содержит недопустимых символов?

Допустимые символы: от 0 до 9 и от A до F. Строки должны быть допустимы.

Я начал с этого кода, но он не работает должным образом (т. Е. Не возвращает false, когда «G» является первым символом):

public static bool VerifyHex(string _hex)
{
    Regex r = new Regex(@"^[0-9A-F]+$", RegexOptions.Multiline);
    return r.Match(_hex).Success;
}

Ответы [ 3 ]

5 голосов
/ 08 сентября 2010

Другой вариант, если вы предпочитаете использовать LINQ вместо регулярных выражений:

public static bool IsHex(string text)
{
    return text.All(IsHexChar); 
}

private static bool IsHexCharOrNewLine(char c)
{
    return (c >= '0' && c <= '9') ||
           (c >= 'A' && c <= 'F') ||
           (c >= 'a' && c <= 'f') ||
           c == '\n'; // You may want to test for \r as well
}

Или:

public static bool IsHex(string text)
{
    return text.All(c => "0123456789abcdefABCDEF\n".Contains(c)); 
}

Я думаю, что регулярное выражение, вероятно, является лучшим вариантом в этом случае, ноЯ хотел просто упомянуть LINQ ради интереса:)

3 голосов
/ 08 сентября 2010

Вы неправильно понимаете параметр Multiline :

Используйте многострочный режим, где ^ и $ соответствуютначало и конец каждой строки (вместо начала и конца входной строки).

Измените его на

static readonly Regex r = new Regex(@"^[0-9A-F\r\n]+$");
public static bool VerifyHex(string _hex)
{
    return r.Match(_hex).Success;
}
1 голос
/ 08 сентября 2010

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

public bool IsHexString(string hexString)
{
    System.Globalization.CultureInfo provider = new System.Globalization.CultureInfo("en-US");
    int output = 0;
    return Int32.TryParse(hexString, System.Globalization.NumberStyles.HexNumber, provider, out output))
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...