ASP. net, c#, как проверить, является ли введенное значение цифрой c, это может быть десятичное или просто целое число - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь ограничить пользователей, чтобы ввести действительное десятичное значение (без запятых)

, что лучше.

Мой код:

try{
 Convert.ToInt32(stringToCheck)
}
catch
{
   //invlaid
}

Не удается если пользователь ввел десятичное значение, скажем, 3,0, хотя это допустимое значение.

Если я попытаюсь Convert.ToDouble(stringToCheck)

, это не удастся поймать, если пользователь введет 3,6

Пожалуйста, помогите!

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020
        var stringToCheck =  "3,6";
        var isDouble =            
        double.TryParse(stringToCheck,NumberStyles.AllowDecimalPoint, 
         NumberFormatInfo.InvariantInfo, out double doubleValue);

        if (isDouble)
        {
            // Do stuff if doubleValue variable
        }
        else
        {
            // code to run if not double
        }
0 голосов
/ 26 марта 2020

Используйте регулярное выражение. Здесь как.

пример:

using System;
using System.Text.RegularExpressions;
    public class Example
    {

    public static void Main()
    {
        string s = "123";

        if (Regex.IsMatch(s, @"^\d+$"))
        {
            Console.WriteLine("Given string is numeric");
        }
        else
        {
            Console.WriteLine("Given string is non-numeric");
        }
    }
}

Вы можете изменить выражение, чтобы принимать любые типы чисел.

Обновить :

Полное решение:

static bool isNumeric(string s)
    {
        if (Regex.IsMatch(s, @"^-?[1-9][0-9,\.]+$"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

Следующий код является тестом:

Console.WriteLine(isNumeric("0123"));//returns false
Console.WriteLine(isNumeric("2.2"));//returns true
Console.WriteLine(isNumeric("-2.0"));//returns true
Console.WriteLine(isNumeric("123123.2"));//returns true
Console.WriteLine(isNumeric("123sad"));//returns false
...