Каков наиболее эффективный способ проверки входной строки, содержит ли она числовое значение (или, наоборот, не число)? Думаю, я могу использовать Double.Parse
или регулярное выражение (см. Ниже), но мне было интересно, есть ли какой-то встроенный способ сделать это, например, javascript NaN()
или IsNumeric()
(это был VB, я не могу вспомнить?).
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
Ответы:
У этого нет накладных расходов на регулярное выражение
Между прочим, все стандартные типы данных, за явным исключением GUID, поддерживают TryParse.
update
secretwep сообщил, что значение «2345» пройдет вышеуказанный тест в виде числа. Однако, если вам нужно убедиться, что все символы в строке являются цифрами, следует использовать другой подход.
пример 1 :
или если вы хотите быть немного более модным
обновление 2 (из @stackonfire для работы с нулевыми или пустыми строками)
источник
Number
объект в Javascript является числом с плавающей точкой или целым числом, поэтому изменение на double. TryParse будет более точным эквивалентомdouble
, но многие сочтут их нечисловыми.public Boolean IsNumber(String s) { Boolean value = true; if (s == String.Empty || s == null) { value=false; } else { foreach(Char c in s.ToCharArray()) { value = value && Char.IsDigit(c); } } return value; }
Я предпочитаю что-то подобное, это позволяет вам решать, на что
NumberStyle
тестировать.источник
В дополнение к предыдущим правильным ответам, вероятно, стоит указать, что «Not a Number» (NaN) в его общем использовании не эквивалентно строке, которая не может быть оценена как числовое значение. NaN обычно понимается как числовое значение, используемое для представления результата «невозможного» вычисления, когда результат не определен. В этом отношении я бы сказал, что использование Javascript немного вводит в заблуждение. В C # NaN определяется как свойство одинарных и двойных числовых типов и используется для явной ссылки на результат понижения нуля на ноль. В других языках он используется для представления других «невозможных» значений.
источник
Я знаю, что на это ответили по-разному, с расширениями и примерами лямбда, но комбинация обоих для простейшего решения.
или если вы используете Visual Studio 2015 (C # 6.0 или выше), тогда
Потрясающий C # 6 в одной строке. Конечно, это ограничено, потому что он проверяет только числовые символы.
Чтобы использовать, просто имейте строку и вызовите на ней метод, например:
источник
Да, IsNumeric - это VB. Обычно люди используют метод TryParse (), хотя он немного неуклюжий. Как вы предложили, вы всегда можете написать свой собственный.
источник
Мне нравится метод расширения, но я не люблю генерировать исключения, если это возможно. Я выбрал метод расширения, взяв здесь лучший из двух ответов.
источник
Вы по-прежнему можете использовать функцию Visual Basic в C #. Единственное, что вам нужно сделать, это просто следовать моим инструкциям, приведенным ниже:
Затем импортируйте его в свой класс, как показано ниже:
с использованием Microsoft.VisualBasic;
Затем используйте его, где хотите, как показано ниже:
Надеюсь, что это помогает и удачи!
источник
VB имеет
IsNumeric
функцию. Вы можете ссылаться на негоMicrosoft.VisualBasic.dll
и использовать его.источник
Простое расширение:
источник
источник
Возможно, это функция C # 3, но вы могли бы ее использовать
double.NaN
.источник
Фактически,
Double.NaN
поддерживается во всех версиях .NET 2.0 и выше.источник
Я использовал фрагмент Криса Лайвли (выбранный ответ), инкапсулированный в функции bool, такой как предложение Гишу, в течение года или двух. Я использовал его, чтобы убедиться, что определенные строки запроса были только числовыми, прежде чем продолжить дальнейшую обработку. Я начал получать некоторые ошибочные строки запроса, которые не обрабатывались отмеченным ответом, в частности, всякий раз, когда после числа вроде «3645» ставилась запятая (возвращалось истина). Это получившийся мод:
источник
Double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out myNum)
У меня немного другая версия, которая возвращает число. Я предполагаю, что в большинстве случаев после тестирования строки вы захотите использовать номер.
источник
Это модифицированная версия решения, предложенного г-ном Сииром. Я считаю, что добавление метода расширения - лучшее решение для повторного использования и простоты вызывающего метода.
Я изменил тело метода, чтобы он умещался в 2 строки, и удалил ненужную реализацию .ToString (). Для тех, кто не знаком с методами расширения, вот как реализовать:
Создайте файл класса ExtensionMethods . Вставьте этот код:
Замените YourNameSpaceHere своим фактическим NameSpace. Сохранить изменения. Теперь вы можете использовать метод расширения в любом месте вашего приложения:
Примечание: этот метод вернет true для целых и десятичных чисел, но вернет false, если строка содержит запятую. Если вы хотите принимать ввод с запятыми или символами, такими как «$», я бы предложил реализовать метод для удаления этих символов сначала, а затем проверить, является ли IsNumeric.
источник