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

C# 判斷字串是否為數字的完整解析:從 Regex 到 TryParse 的最佳實踐

     編輯:關於C語言

前言:為什麼 C# 沒有內建的 IsNumeric?

在 VB.NET 中,IsNumeric 是一個方便的內建函數,但 C# 設計團隊刻意不提供這樣的方法。原因在於「數字」的定義極其廣泛:整數、浮點數、科學記號、貨幣格式、十六進位等,單一函數難以涵蓋所有情境。C# 傾向於讓開發者根據具體需求選擇合適的驗證策略。

方案一:正則表達式——適用於簡單整數場景

若僅需驗證非負整數,正則表達式是效能不錯的選擇:

public int IsNumeric(string str)
{
    int i;
    if (str != null && Regex.IsMatch(str, @"^\d+$"))
        i = int.Parse(str);
    else
        i = -1;
    return i;
}

缺點:無法處理負號、小數點、科學記號(如 -3.14159E+10),擴展性差。

方案二:TryParse 模式——標準、安全、高效

.NET Framework 2.0 引入 TryParse 系列方法,避免了例外處理的效能開銷,是現代 C# 的首選:

public bool IsNumeric(string s, out double result)
{
    return double.TryParse(s, out result);
}

優點:

  • 支援整數、浮點數、科學記號、正負號
  • 無例外拋出,效能穩定
  • 雙重回傳:bool 表示成功與否,out 參數攜帶轉換結果

進階用法:針對特定數值型別

// 僅驗證 32 位元整數
if (int.TryParse(input, out int intVal)) { ... }

// 僅驗證雙精度浮點數,允許特定格式
if (double.TryParse(input, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out double dblVal)) { ... }

何時仍需考慮正則或自訂邏輯?

  • 需嚴格限制格式(如:禁止前導零、固定小數位數)
  • 需在驗證階段即拒絕超出型別範圍的超長數字字串(TryParse 會嘗試轉換並溢位返回 false,但極長字串解析仍有 CPU 成本)
  • 舊版專案無法使用 TryParse(極罕見)

總結建議

  1. 首選 double.TryParse / int.TryParse / decimal.TryParse——標準、快速、語意清晰。
  2. 需嚴格格式控制時,搭配 Regex 或 NumberStyles 微調。
  3. 避免使用 Parse + try-catch 作為常規驗證手段,例外處理成本高且語意不清。

掌握 TryParse 模式,即能優雅解決 99% 的「字串轉數字」驗證需求。

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