日期:2014-05-17  浏览次数:20516 次

[散分]分享一个检测字符串是否为数字的方法
散分,散分

为了让大家得到技术分,分享一个检测字符串是否为数字的方法

上代码

C# code
public static bool IsNumber(this string input)
        {
            if (string.IsNullOrEmpty(input)) 
                return false;

            //i : 计数器(记录共有多少个.)
            //j : 起始校验位置
            //m : 字符串长度
            int i = 0, j = 0, m = input.Length; 
            if (input[m - 1] == '.') //任何以.结尾的字符串都不是数字
                return false;

            if (input[0] == '+' || input[0] == '-')
            {
                j = 1;  //如果第一位为+或者-,那么将从第2为开始检测
                if (m == 1) return false; //如果此时字符串的长度为1,那么不是数字
            }

            if (input[j] == '0') 
            {
                if (m > j)
                    if (input[j + 1] != '.') return false; //如果开始检测位是0,不是末位,那么下一位如果不是.   则不是数字
            }

            for (; j < m; j++)
            {
                if (input[j] == '.')
                    i++;
                else
                {
                    if (input[j] < 48 || input[j] > 57)
                        return false;
                }
            }

            if (i > 1) return false; //如果多于1个. 则不是数字

            return true;
        }


发现的Bug的将得到较多的分,呵呵呵

------解决方案--------------------
谢谢楼主分享~
JF
------解决方案--------------------
int.TryParse ()方法也可以啊。呵呵 接分...
------解决方案--------------------
楼主这么好心,我就不客气了..呵..
顺便学习一下..
------解决方案--------------------
谢谢楼主分享

------解决方案--------------------
帮顶,接分
------解决方案--------------------
谢谢分享
------解决方案--------------------
谢谢分享
------解决方案--------------------
顶这个..好长时间没看到分享了
------解决方案--------------------
探讨
引用:
int.TryParse ()方法也可以啊。呵呵  接分...


呵呵,这个会有异常的,而且有时候我只是想判断它是否为数字,而不是进行类型转换.

------解决方案--------------------
谢谢分享
------解决方案--------------------
恩,不错,用正则也是可以的。
------解决方案--------------------
探讨
引用:
int.TryParse ()方法也可以啊。呵呵  接分...


呵呵,这个会有异常的,而且有时候我只是想判断它是否为数字,而不是进行类型转换.

------解决方案--------------------
up...接分...
------解决方案--------------------
不用搞这么麻烦,直接使用Int32或Double的TryParse()就行了。
TryParse 方法在转换失败时不引发异常。

下面是Int32.TryParse()的输入参数
s 参数包含一个如下形式的数字: 

[ws][sign]digits[ws] 

方括号([ 和 ])中的项是可选的;其他项的值如下所示。

ws 
可选的空白。 

sign 
一个可选符号。 

digits 
一系列从 0 到 9 之间的数字。


下面是Double.TryParse()的输入参数
s 参数可以包含 PositiveInfinitySymbol、NegativeInfinitySymbol、NaNSymbol 或以下形式的字符串: 

[ws][sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits][ws] 

可选项括在方括号([ 和 ])中。包含“digits”一词的项由一系列从 0 到 9 之间的数字字符组成。

ws 
一系列空白字符。 

sign 
负号或正号。 

integral-digits 
指定数字整数部分的一系列数字。整数位组可以用组分隔符分开。(例如,在某些区域性中,用逗号 (,) 作为千位分隔符。)有小数位时可以没有整数位。