程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#中判斷是否為數字

C#中判斷是否為數字

編輯:C#基礎知識

有人提議用int.Parse(string)的方法,然後通過捕獲異常來判斷返回的值。更好的方法是用正則表達式:
public int IsNumeric(string str)
{
      int i;
      if(str != null && Regex.IsMatch(str,@"^\d+$"))
               i = int.Parse(str);
      else
                i = -1;
        return i;
}

這應該是個好辦法。不過如果要提出更高的要求,例如不僅要判斷字符串是否全為數字,還要在判斷後,要求將其進行轉換。那麼上述函數就有缺陷,因為在上面的正則表達式中無法判斷‘-’符號。因此上面的函數只能轉換非負數。尤有甚者,要求轉換的不僅是整數,還包括浮點數,尤其是科學計數法的字符串,例如:string s = "-3.14159E+10"

這裡面的'E'、'.'、'+'等字符,都是比較特殊的,而且還要求它們出現的位置要符合浮點數或科學計數方法的規定。那麼就不能使用正則表達式了,至少很麻煩(我是這樣認為的,或許有好的方法)。問題還是回到最初的解決方案,就是使用Parse()方法和捕獲異常。以下是實現此功能的方法:
public bool IsNumeric(string s, out double result)
{
   bool bReturn = true;
   try
   {
        result = double.Parse(s);
   }
   catch
   {
        result = 0;
       bReturn = false;
   }
   return bReturn;     
}
例如調用:

string s1="abc";
string s2="-3.14159E+10";
double d1,d2;
bool ty1 = IsNumeric(s1,out d1);
bool ty2 = IsNumeric(s2,out d2);
結果:
ty1=false;d1=0;
ty2=true;d2=31415900000

說明:因為涉及到浮點數,就不能使用-1來做為出現錯誤的返回值,如前面的例子。也就是說本方法有兩個返回值,一個是判斷轉換是否成功,為bool型;另一個是轉換成功後的浮點數值。我用out來解決該問題。

本方法仍然適合整型,只需對返回值進行強制轉換即可。

在VB中原有一個 inumeric函數來判斷
到了C#.net中卻沒有了。

網上很多用的是try{}來做,這一方法不是不行,但是,由於這個是用catch一個錯誤來實現,會導致數據比較慢(個人嘗試過,覺得慢多了),所以,以下方法使用的是一個正則表達式得來的

    //判斷是否為正整數
    public static bool IsInt(string inString)
    {
        Regex regex = new Regex("^[0-9]*[1-9][0-9]*$");
        return regex.IsMatch(inString.Trim());
    }

用這個方法除了判斷是否為數字還可以判斷其他的,比如判斷E-mail格式是否正確等等,只要正則表達式支持的,這裡都支持,只需要把正則表達式替換了代碼中藍色的部分即可,關於正則不會的,可以在我BLOG裡找,有一篇正則的介紹,相當全面!

幾個正則表達式的例子:

"^\\d+$"  //非負整數(正整數 + 0)  
"^[0-9]*[1-9][0-9]*$"  //正整數    
"^((-\\d+)|(0+))$"  //非正整數(負整數 + 0)    
"^-[0-9]*[1-9][0-9]*$"  //負整數    
"^-?\\d+$"    //整數    
"^\\d+(\\.\\d+)?$"  //非負浮點數(正浮點數 + 0)    
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"   
//正浮點數    
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮點數(負浮點數 + 0)    
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"   
//負浮點數    
"^(-?\\d+)(\\.\\d+)?$"  //浮點數    
"^[A-Za-z]+$"  //由26個英文字母組成的字符串    
"^[A-Z]+$"  //由26個英文字母的大寫組成的字符串    
"^[a-z]+$"  //由26個英文字母的小寫組成的字符串    
"^[A-Za-z0-9]+$"  //由數字和26個英文字母組成的字符串    
"^\\w+$"  //由數字、26個英文字母或者下劃線組成的字符串    
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址    
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved