Я должен проверить, содержит ли строка только цифры. Как я мог достигнуть этого в C#?
string s = "123" → valid
string s = "123.67" → valid
string s = "123F" → invalid
Есть ли какая-либо функция как IsNumeric?
Вы можете использовать Double.triparse
string value;
double number;
if (Double.TryParse(value, out number))
Console.WriteLine("valid");
else
Console.WriteLine("invalid");
Как указано выше, вы можете использовать Double.triparse
Если вам это не нравится (по какой-то причине), вы можете написать свой собственный метод расширения:
public static class ExtensionMethods
{
public static bool isNumeric (this string str)
{
for (int i = 0; i < str.Length; i++ )
{
if ((str[i] == '.') || (str[i] == ',')) continue; //Decide what is valid, decimal point or decimal coma
if ((str[i] < '0') || (str[i] > '9')) return false;
}
return true;
}
}
Использование:
string mystring = "123456abcd123";
if (mystring.isNumeric()) MessageBox.Show("The input string is a number.");
else MessageBox.Show("The input string is not a number.");
Вход:
123456ABCD123
123,6
Выход:
false
true
Я думаю, что вы можете использовать регулярные выражения, в классе Regex
Regex.ismatch (YourStr, «\ D»)
или что-то вроде этого от верхней части моей головы.
Или вы можете использовать метод анализа Int.Parse (...)
Если вы получаете строку в качестве параметра, тем более гибкий способ Было бы использовать Regex, как описано на других постах. Если вы получите вход от пользователя, вы можете просто подключить к клавиатуре и игнорировать все клавиши, которые не являются номерами. Таким образом, вы будете уверены, что у вас есть только цифры.
Это должно работать:
bool isNum = Integer.TryParse(Str, out Num);
Это должно работать независимо от того, как долго строка:
string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
Использование регулярных выражений является самым простым способом (но не самым быстрым):
bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
double n;
if (Double.TryParse("128337.812738", out n)) {
// ok
}
Работы, предполагающие, что номер не переполняет двойной
для огромной строки, попробуйте Regexp:
if (Regex.Match(str, @"^[0-9]+(\.[0-9]+)?$")) {
// ok
}
Добавить в научную запись (E / E) или +/- Знаки, если это необходимо ...
, взятый из MSDN (как реализовать Visual Basic .NET ISNUMIC Функциональность, используя Visual C #):
// IsNumeric Function
static bool IsNumeric(object Expression)
{
// Variable to collect the Return value of the TryParse method.
bool isNum;
// Define variable to collect out parameter of the TryParse method. If the conversion fails, the out parameter is zero.
double retNum;
// The TryParse method converts a string in a specified style and culture-specific format to its double-precision floating point number equivalent.
// The TryParse method does not generate an exception if the conversion fails. If the conversion passes, True is returned. If it does not, False is returned.
isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );
return isNum;
}