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

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

     編輯:關於C語言

方法一:正則表達式(簡單整數)

string pattern = @"^\d+$";
bool isNumeric = Regex.IsMatch(input, pattern);

適用:非負整數、效能尚可、但無法處理負號、小數、科學記號。

方法二:手寫字元迴圈檢查

private bool IsNumber(string s) {
    if (string.IsNullOrEmpty(s)) return false;
    foreach (char c in s) {
        if (!char.IsDigit(c)) return false;
    }
    return true;
}

適用:極簡場景、零分配、僅需判斷 0-9 字元。

方法三:TryParse 模式(推薦標準作法)

private void Button1_Click(object sender, EventArgs e) {
    if (double.TryParse(TextBox1.Text.Trim(), out double result)) {
        TextBox2.Text = "是數字";
    } else {
        TextBox2.Text = "不是數字";
    }
}

優點:支援完整數值格式(正負、小數、科學記號、千分位)、無例外開銷、同時取得數值。

方法四:Parse + Try-Catch(不推薦常規使用)

try {
    double.Parse(TextBox1.Text);
    Response.Write("是數字");
} catch {
    Response.Write("不是數字");
}

缺點:例外處理成本高、語意不清、僅適用極罕見情境。

方法五:進階正則(支援小數、正負號)

using System.Text.RegularExpressions;

Regex regex = new Regex(@"^\d+(\.\d+)?$"); // 非負浮點數
// 或
Regex regex = new Regex(@"^[+-]?\d*\.?\d*$"); // 一般數值格式

if (regex.IsMatch(input)) { ... }

注意:正則僅驗證格式,無法保證數值在型別範圍內(如超長數字字串通過正則但 Parse 會溢位)。

方法六:Int32.TryParse 專用整數驗證

public static bool StrIsInt(string str) {
    return Int32.TryParse(str, out _);
}

方法七:嚴格格式控制正則(固定小數位)

string pattern = @"^\d+(\.\d{2})?$"; // 僅允許 2 位小數
if (!Regex.IsMatch(input.Trim(), pattern)) {
    // 格式不符
}

綜合比較表

方法支援格式效能取得數值推薦度
Regex ^\d+$非負整數中否⭐⭐
字元迴圈0-9 字元高否⭐⭐⭐ (特定場景)
double.TryParse完整數值格式高是⭐⭐⭐⭐⭐ (首選)
Parse+try-catch完整數值格式低是⭐ (避免)
進階 Regex可自訂中否⭐⭐⭐ (格式管控)
Int32.TryParse32位整數高是⭐⭐⭐⭐ (整數專用)

關鍵提醒:格式通過 ≠ 轉換成功

社區實測:"999...999" (50 位) 通過 Regex 或字元檢查,但 int.Parse/double.Parse 會拋 OverflowException。唯有 TryParse 同時完成格式驗證與範圍檢查。

最佳實踐建議

  1. 一般情況:double.TryParse / decimal.TryParse(金融)
  2. 僅需整數:int.TryParse / long.TryParse
  3. 需嚴格格式(如發票金額 2 位小數):Regex 先驗格式 → TryParse 再轉換
  4. 極高頻熱路徑、極簡格式:手寫字元迴圈
  5. 永遠避免 Parse + try-catch 作為驗證手段

選對方法,不僅程式碼正確,效能也能最大化。

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