c # регулярное выражение только числовые символы в строке - PullRequest
1 голос
/ 16 декабря 2011

Я хочу проверить, состоит ли строка с неопределенной длиной только из чисел. Пример:

"234324" = true
"er32" = false
"1" = true

способ, которым я пытался решить эту проблему, выглядит следующим образом:

public bool Validate(string input)
{
    return (Regex.IsMatch(input, @"^\d+$")) ? true : false;
}

сейчас я не большой герой с регулярными выражениями, но, согласно всему, что я мог найти в интернете, выражение "^\+$" или "^[0-9]$" подойдет, но оно не работает: (

Ответы [ 5 ]

10 голосов
/ 16 декабря 2011

Здесь нет необходимости в RegEx, вы можете использовать int.TryParse , чтобы проверить, является ли string действительным целым числом.

public bool Validate(string input)
{
     int myNumber;
     return int.TryParse(input, out myNumber);
}

Обратите внимание, что IsMatch уже возвращает bool, ? true : false бесполезно.

3 голосов
/ 20 декабря 2011

использовать "^[0-9]+$" знак "^[0-9]$" (обратите внимание на символ +), что означает, что будет оцениваться несколько символов

3 голосов
/ 16 декабря 2011
int number;
return int.TryParse(input, out number);
2 голосов
/ 16 декабря 2011

Если строка действительно может иметь произвольную длину, то Рэй прав, говоря, что код в принятом ответе потерпит неудачу, если число, представленное строкой:> Int32.MaxValue.

Следующий примервернет false вместо true:

bool isNumber = Validate(Int64.MaxValue.ToString()); // isNumber == false

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

public bool Validate(string input)
{
   return input.ToCharArray().All(c => Char.IsDigit(c));    
}
2 голосов
/ 16 декабря 2011

^\d+$ должно работать и работает на меня.Два ваших примера в конце не сработают, потому что в ^\+$ отсутствует d (я предполагаю, что это опечатка, но она должна быть ^\d+$), а во втором нужен плюс после закрывающей квадратной скобки (т.е.^[0-9]+$).

Я бы проверил, имеет ли значение усечение ввода, возможно, у вас есть пробел, который вызывает проблемы.В противном случае ваша ошибка находится где-то еще, а не в этом коде.

...