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 字元。
private void Button1_Click(object sender, EventArgs e) {
if (double.TryParse(TextBox1.Text.Trim(), out double result)) {
TextBox2.Text = "是數字";
} else {
TextBox2.Text = "不是數字";
}
}
優點:支援完整數值格式(正負、小數、科學記號、千分位)、無例外開銷、同時取得數值。
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 會溢位)。
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.TryParse | 32位整數 | 高 | 是 | ⭐⭐⭐⭐ (整數專用) |
社區實測:"999...999" (50 位) 通過 Regex 或字元檢查,但 int.Parse/double.Parse 會拋 OverflowException。唯有 TryParse 同時完成格式驗證與範圍檢查。
double.TryParse / decimal.TryParse(金融)int.TryParse / long.TryParseRegex 先驗格式 → TryParse 再轉換Parse + try-catch 作為驗證手段選對方法,不僅程式碼正確,效能也能最大化。