Как сделать лучше regex'ом?

Рейтинг: 3Ответов: 2Опубликовано: 25.01.2011

Функция проверяет наличие цифр в строке:

bool HasDigits(string sample)
{
    bool has;

    foreach (char c in sample)
    {
        if (char.IsNumber(c))
        {
            has = true;
            break;
        }
    }

    return has;
}

Как сделать то же самое на регулярных выражениях? И нужно ли (по идее, должно быть меньше кода)?

Ответы

▲ 4Принят
bool HasDigits(string sample) {
    return new Regex("\\d").IsMatch(sample);
}
▲ 7

Игра не стоит свеч, право же.

Вы хотите забить гвоздь микроскопом… Вернее даже, наверное, многотонным прессом.

Регулярные выражения придуманы совсем не для этого. Столь простую обработку текста проще, читабельнее и эффективнее выполнить просто посимвольно.

Из Вашего кода можно убрать пару лишних строчек:

bool HasDigits(string sample)
{
    foreach (char c in sample)
    {
        if (char.IsNumber(c))
        {
            return true;
        }
    }

    return false;
}

P.S. Немного рассуждений о жизни: при написании программы главным приоритетом должна быть простота и читабельность. Лаконичность кода очень хороша, но стремление сжать его как можно сильнее обычно приводит к усложнению.

Да и короче уж точно не получится — у вас строки три уйдёт на то, чтобы подключить махину регулярных выражений, и ещё пара строк на работу с ними.