如何判断一个字符串是否是正整型???不要使用try catch

解决方案 »

  1.   

    可以这样
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Data;
    using System.Windows.Forms;namespace StandWork_Mobile.App_Code.Common
    {
        class CommenClass
        {
            public static bool StringIsInt(string strInt)
            {
                if (strInt != null && Regex.IsMatch(strInt, @"^\d+$"))
                    return true;
                else
                    return false;
            }
        }
    }
      

  2.   

    int.TryParse...只适用于.NET 2.0以上版本...
    int result=0;
    int.TryParse(yourstring, out result);
    if(result>0)
    {
    ...
    }
      

  3.   


    int i = 0;
    string str = "123";
    if (!int.TryParse(str, out i)
    {
    //不是整型
    }
    else
    {
    //是整型
    }
      

  4.   

    我的兄弟姐妹们啊,int.TryParse不是还得判断得大于0麽?int.TryParse("-99999999",0)仍然是true.
      

  5.   

    正则啦int result=0;
    int.TryParse(yourstring, out result);
    if(result>0)
    {
    ...
    }这方法第一回见呢,不错哦
      

  6.   

    你只有自己写了,试试看下面的代码。再加点分吧。:) public bool IsPositiveInt(string strInt)
        {
          char[] chaStr = strInt.ToCharArray();
          bool getFirst = false;
          foreach (char c in chaStr)
          {
            if (!getFirst)
            {
              if (!c.Equals('+'))
              {
                return false;
              }
              getFirst = true;
            }
            else
            {
              if (!char.IsDigit(c))
              {
                return false;
              }
            }
          }
          return true;
        }
      

  7.   

    我上面写的有个Bug,重贴一次。
    public static bool IsPositiveInt(string strInt)
        {
          char[] chaStr = strInt.ToCharArray();
          bool getFirst = false;
          foreach (char c in chaStr)
          {
            if (!getFirst)
            {
              if (c.Equals('+') || char.IsDigit(c))
              {
                getFirst = true;
                continue;
              }
              else
              {
                return false;
              }
            }
            else
            {
              if (!char.IsDigit(c))
              {
                return false;
              }
            }
          }
          return true;
        }
      

  8.   

        /// <summary>
        /// 检测是否为正整数
        /// </summary>
        /// <param name="number">正整数</param>
        /// <returns>返回 true or false</returns>
        public static bool isNumber(string number)
        {
            bool flag = true;
            string strExp = @"^[1-9][0-9]{0,}$";
            Regex r = new Regex(strExp);
            Match m = r.Match(number);
            if (!m.Success)
            {
                flag = false;
            }
            return flag;
        }
      

  9.   

    sql server 里的整型,最大是999999999(9个9)
    而,.net中            最大是21474836479999999999(10个9)在.net 中是整形,没有问题,可是插入数据库的时候,却有问题了。
      

  10.   

    System.Text.RegularExpressions.Regex Regexp=new System.Text.RegularExpressions.Regex("^[1-9]\\d*$");
    if(Regexp.IsMatch(this.TextBox1.Text))
      

  11.   

    sqlserver里有decimal十进制类型。也有纯二进制的int整型,两者取值是不同的。.net应该也一样。
      

  12.   

    int.TryParse("-99999999",0)仍然是true. 
    --------------------------不明白这句话是什么意思?勉强理解了一下“0”,但-99999999为什么不能是整数呢?要知道整数在.net里最小值是-2147483648。整数可是32位的啊。
      

  13.   

    查了一下SqlServer2000的整数定义范围如下:int从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
    “sql   server   里的整型,最大是999999999(9个9) ”
    这句不明白了又。
      

  14.   

    查了一下SqlServer2000的整数定义范围如下:int从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
    “sql   server   里的整型,最大是999999999(9个9) ”
    这句不明白了又。
      

  15.   

    int i = 0;
    string str = "-123";
    if (!int.TryParse("-" + str, out i)
    {
        //不是正整型
    }
    else
    {
        //是正整型
    }
      

  16.   

    写个try catch语句块,如果抛出异常,则为非整数,然后再进一步判断是否大于零.
      

  17.   

    觉得还是循环一下来的直接bool isPositveInt(string s)
    {
        if(s.Trim().IsNullOrEmpty())
        {
            return false;
        }    bool b = true;
        foreach(char c in s)
        {
            if(c>'9'||c<'0')
            {
                b = false;
            }
        }    return b;
    }没有测试
      

  18.   

    谢谢大家的热心帮忙。其实这个问题不难,也有很多的解决方案。这是我的最后解决方案。
    "^([1-9]{1}[0-9]{0," & maxLen - 1 & "}|0)?$"回答hbxtlhx的问题。SQL SERVER的表的字段被定义成int时,最大可以输入9个9,不信你试下。
      

  19.   

    1楼判断的是字符串是否为数字 考虑到书写规范 需要改改 
            /// <summary>
            /// 判断字符串是否为数字
            /// </summary>
            /// <param name="str">要判断的字符串对象</param>
            /// <returns></returns>
            public static bool IsNumber(string str)
            {
                return Regex.IsMatch(str, @"^\d+$");
            }        /// <summary>
            /// 判断字符串是否为正整数
            /// </summary>
            /// <param name="str">要判断的字符串对象</param>
            /// <returns></returns>
            public static bool IsInt(string str)
            {
                return Regex.IsMatch(str, @"^(0|([1-9]\d*))$");
            }当然 考虑到数值范围 如int32 int64等 还需要改正
      

  20.   

    所以我觉得像楼主这样的问题这样判断会更好:int tmp=-1;
    if (int.TryParse(str, out tmp) && tmp>0)
    {
        //str字符串表示的是一个正整数
    }
    else
    {
        //str表示的是非整数或是小于0的整数
    }
      

  21.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Globalization;namespace TempTestA1
    {
        class Class7
        {
            public static void Main()
            {
                int r = 0;
                // 只允许前导空白、结尾空白、千分位符
                Console.WriteLine("下列返回 true");
                Console.WriteLine(int.TryParse("123456", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("123,456", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("  \r\n 123,456 \r\n ", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("0", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));            // 正负符号、16 进制、小数点等不允许
                Console.WriteLine("下列返回 false");
                Console.WriteLine(int.TryParse("+123456", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("-0", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("123.456", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
                Console.WriteLine(int.TryParse("0xb345", NumberStyles.AllowLeadingWhite | NumberStyles.AllowThousands | NumberStyles.AllowTrailingWhite, null, out r));
            }    }
    }
      

  22.   

    int result=0; int.TryParse(yourstring, out result); if(result>0) { ... } 
    -----------
    这个方法最好的。