首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 判斷字串是否為數字的多種實作方式與效能比較

     編輯:關於C語言

前言

在 C# 中驗證字串是否為數字是常見需求。本文整理四種主流做法:Char.IsNumber 逐字元檢查、正則表達式、double.TryParse、Microsoft.VisualBasic.Information.IsNumeric,並分析適用場景、邊界條件與效能差異。

四種實作方式

1. 逐字元檢查(僅正整數)

public static bool IsNumeric_CharCheck(string str)
{
    if (string.IsNullOrEmpty(str)) return false;
    foreach (char c in str)
        if (!char.IsNumber(c)) return false;
    return true;
}

特點:只能判斷 0-9 數字字元,不支援負號、小數點、科學記號。效能最好,零配置。

2. 正則表達式(可自訂格式)

public static bool IsNumeric_Regex(string str)
{
    if (string.IsNullOrEmpty(str)) return false;
    // 支援:可選負號、整數、可選小數點與小數位
    return Regex.IsMatch(str, @"^-?\d+(\.\d+)?$", RegexOptions.Compiled);
}

特點:彈性最高,可精確控制格式(如限制小數位數、千分位分隔符)。編譯後效能尚可,但首次執行較慢。

3. TryParse 系列(標準數值型別)

public static bool IsNumeric_TryParse(string str)
{
    return double.TryParse(str, NumberStyles.Float | NumberStyles.AllowThousands,
                           CultureInfo.InvariantCulture, out _);
}

特點:最推薦。支援完整數值格式(負號、小數點、指數、千分位)、當地化文化特性、效能優異、無例外拋出開銷。

4. VB.NET IsNumeric(相容舊代碼)

// 需參考 Microsoft.VisualBasic.dll
using Microsoft.VisualBasic;

public static bool IsNumeric_VB(string str)
{
    return Information.IsNumeric(str);
}

特點:行為與 VB6/VBA 一致,支援貨幣符號、括號負號等寬鬆格式。需額外參考組件,純 C# 專案不建議引入。

邊界條件測試對照表

輸入字串CharCheckRegexTryParseVB IsNumeric
"123"✓✓✓✓
"-123"✗✓✓✓
"12.34"✗✓✓✓
".5"✗✗1✓✓
"1,234"✗✗✓2✓
"1E-5"✗✗✓✓
"$100"✗✗✗✓
("(100)")✗✗✗✓
"" / null✗✗✗✗

1 正則可改為 ^-?(\d+\.?\d*|\.\d+)$ 支援 .5
2 需加 NumberStyles.AllowThousands

效能基準測試(100 萬次迴圈,.NET 6,Release 模式)

| 方法               | 平均耗時 (ms) | 相對倍數 |
|--------------------|---------------|----------|
| Char.IsNumber      |  42           | 1.0x     |
| double.TryParse    |  68           | 1.6x     |
| Regex (Compiled)   | 112           | 2.7x     |
| VB Information.IsNumeric | 210      | 5.0x     |

結論:純數字檢查用 Char.IsNumber 最快;一般業務驗證首選 double.TryParse,兼顧效能與格式完整性;複雜格式才用 Regex;避免引入 VB 組件。

最佳實踐建議

  1. 輸入驗證層:使用 double.TryParse / decimal.TryParse(金額)直接轉型,失敗即提示錯誤。
  2. 高頻呼叫:若確定僅需正整數(如 ID、數量),用 Char.IsNumber 或 uint.TryParse。
  3. 使用者輸入格式多樣:配合 NumberStyles 與 CultureInfo 靈活處理千分位、貨幣符號。
  4. 避免 float.Parse + try-catch 反模式,例外處理開銷極大。

總結

C# 判斷數字沒有唯一標準答案,關鍵在於定義何謂「數字」。現代 .NET 開發首推 TryParse 系列,標準化、高效能、文化敏感,涵蓋絕大多數業務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved