Проверьте строку только на цифры и одну дополнительную десятичную точку.

Я должен проверить, содержит ли строка только цифры. Как я мог достигнуть этого в C#?

string s = "123"    → valid 
string s = "123.67" → valid 
string s = "123F"   → invalid 

Есть ли какая-либо функция как IsNumeric?

7
задан goodeye 21 June 2013 в 16:34
поделиться

9 ответов

Вы можете использовать Double.triparse

string value;
double number;

if (Double.TryParse(value, out number))
   Console.WriteLine("valid");
else
   Console.WriteLine("invalid");
3
ответ дан 6 December 2019 в 09:19
поделиться

Как указано выше, вы можете использовать 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

1
ответ дан 6 December 2019 в 09:19
поделиться

Я думаю, что вы можете использовать регулярные выражения, в классе Regex

Regex.ismatch (YourStr, «\ D»)

или что-то вроде этого от верхней части моей головы.

Или вы можете использовать метод анализа Int.Parse (...)

0
ответ дан 6 December 2019 в 09:19
поделиться

Если вы получаете строку в качестве параметра, тем более гибкий способ Было бы использовать Regex, как описано на других постах. Если вы получите вход от пользователя, вы можете просто подключить к клавиатуре и игнорировать все клавиши, которые не являются номерами. Таким образом, вы будете уверены, что у вас есть только цифры.

0
ответ дан 6 December 2019 в 09:19
поделиться

Это должно работать:

bool isNum = Integer.TryParse(Str, out Num);
-1
ответ дан 6 December 2019 в 09:19
поделиться

Это должно работать независимо от того, как долго строка:

string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
2
ответ дан 6 December 2019 в 09:19
поделиться

Использование регулярных выражений является самым простым способом (но не самым быстрым):

bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
2
ответ дан 6 December 2019 в 09:19
поделиться
double n;
if (Double.TryParse("128337.812738", out n)) {
  // ok
}

Работы, предполагающие, что номер не переполняет двойной

для огромной строки, попробуйте Regexp:

if (Regex.Match(str, @"^[0-9]+(\.[0-9]+)?$")) {
  // ok
}

Добавить в научную запись (E / E) или +/- Знаки, если это необходимо ...

10
ответ дан 6 December 2019 в 09:19
поделиться

, взятый из 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;
}
3
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: