Что такое C # эквивалент NaN или IsNumeric? - PullRequest
95 голосов
/ 13 января 2009

Какой самый эффективный способ проверки входной строки, содержит ли она числовое значение (или, наоборот, не число)? Я думаю, я могу использовать Double.Parse или регулярное выражение (см. Ниже), но мне было интересно, есть ли какие-то встроенные средства для этого, такие как javascript NaN() или IsNumeric() (это был VB, я не могу вспомнить ?).

public static bool IsNumeric(this string value)
{
    return Regex.IsMatch(value, "^\\d+$");
}

Ответы [ 14 ]

3 голосов
/ 09 ноября 2009
public static bool IsNumeric(string anyString)
{
    if (anyString == null)
    {
        anyString = "";
    }

    if (anyString.Length > 0)
    {
        double dummyOut = new double();
        System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true);
        return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut);
    }
    else
    {
        return false;
    }
}
2 голосов
/ 04 апреля 2013

Я использовал фрагмент Криса Лайвли (выбранный ответ), инкапсулированный в функцию bool, как совет Гишу, в течение года или двух. Я использовал его, чтобы убедиться, что определенные строки запроса были только числовыми, прежде чем продолжить дальнейшую обработку. Я начал получать некоторые ошибочные строки запросов, которые помеченный ответ не обрабатывал, в частности, всякий раз, когда после числа, такого как «3645», передавалась запятая (возвращала true). Вот такой получился мод:

   static public bool IsNumeric(string s)
   {
      double myNum = 0;
      if (Double.TryParse(s, out myNum))
      {
         if (s.Contains(",")) return false;
         return true;
      }
      else
      {
         return false;
      }
   }
2 голосов
/ 24 ноября 2010

На самом деле, Double.NaN поддерживается во всех версиях .NET 2.0 и выше.

0 голосов
/ 08 марта 2018

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

public bool IsNumeric(string numericString, out Double numericValue)
{
    if (Double.TryParse(numericString, out numericValue))
        return true;
    else
        return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...