Identify if a string is a number

前端 未结 25 3056
無奈伤痛
無奈伤痛 2020-11-22 00:13

If I have these strings:

  1. \"abc\" = false

  2. \"123\" = true

  3. \"ab2\"

相关标签:
25条回答
  • 2020-11-22 00:35
    public static bool IsNumeric(this string input)
    {
        int n;
        if (!string.IsNullOrEmpty(input)) //.Replace('.',null).Replace(',',null)
        {
            foreach (var i in input)
            {
                if (!int.TryParse(i.ToString(), out n))
                {
                    return false;
                }
    
            }
            return true;
        }
        return false;
    }
    
    0 讨论(0)
  • 2020-11-22 00:35

    Pull in a reference to Visual Basic in your project and use its Information.IsNumeric method such as shown below and be able to capture floats as well as integers unlike the answer above which only catches ints.

        // Using Microsoft.VisualBasic;
    
        var txt = "ABCDEFG";
    
        if (Information.IsNumeric(txt))
            Console.WriteLine ("Numeric");
    
    IsNumeric("12.3"); // true
    IsNumeric("1"); // true
    IsNumeric("abc"); // false
    
    0 讨论(0)
  • 2020-11-22 00:36

    You can use TryParse to determine if the string can be parsed into an integer.

    int i;
    bool bNum = int.TryParse(str, out i);
    

    The boolean will tell you if it worked or not.

    0 讨论(0)
  • 2020-11-22 00:37

    You can always use the built in TryParse methods for many datatypes to see if the string in question will pass.

    Example.

    decimal myDec;
    var Result = decimal.TryParse("123", out myDec);
    

    Result would then = True

    decimal myDec;
    var Result = decimal.TryParse("abc", out myDec);
    

    Result would then = False

    0 讨论(0)
  • 2020-11-22 00:37

    Double.TryParse

    bool Double.TryParse(string s, out double result)
    
    0 讨论(0)
  • 2020-11-22 00:38

    I know this is an old thread, but none of the answers really did it for me - either inefficient, or not encapsulated for easy reuse. I also wanted to ensure it returned false if the string was empty or null. TryParse returns true in this case (an empty string does not cause an error when parsing as a number). So, here's my string extension method:

    public static class Extensions
    {
        /// <summary>
        /// Returns true if string is numeric and not empty or null or whitespace.
        /// Determines if string is numeric by parsing as Double
        /// </summary>
        /// <param name="str"></param>
        /// <param name="style">Optional style - defaults to NumberStyles.Number (leading and trailing whitespace, leading and trailing sign, decimal point and thousands separator) </param>
        /// <param name="culture">Optional CultureInfo - defaults to InvariantCulture</param>
        /// <returns></returns>
        public static bool IsNumeric(this string str, NumberStyles style = NumberStyles.Number,
            CultureInfo culture = null)
        {
            double num;
            if (culture == null) culture = CultureInfo.InvariantCulture;
            return Double.TryParse(str, style, culture, out num) && !String.IsNullOrWhiteSpace(str);
        }
    }
    

    Simple to use:

    var mystring = "1234.56789";
    var test = mystring.IsNumeric();
    

    Or, if you want to test other types of number, you can specify the 'style'. So, to convert a number with an Exponent, you could use:

    var mystring = "5.2453232E6";
    var test = mystring.IsNumeric(style: NumberStyles.AllowExponent);
    

    Or to test a potential Hex string, you could use:

    var mystring = "0xF67AB2";
    var test = mystring.IsNumeric(style: NumberStyles.HexNumber)
    

    The optional 'culture' parameter can be used in much the same way.

    It is limited by not being able to convert strings that are too big to be contained in a double, but that is a limited requirement and I think if you are working with numbers larger than this, then you'll probably need additional specialised number handling functions anyway.

    0 讨论(0)
提交回复
热议问题