首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 正則驗證:只允許數字和連字符的正確寫法

     編輯:程式設計綜合問答

原代碼問題

Regex r = new Regex(@"^[0-9\-]");  // ❌ 只匹配開頭第一個字符
if (r.IsMatch(val.ToString())) { ... }  // ❌ 邏輯反了:匹配上才報錯

正確正則

// ^ 開頭  $ 結尾  [\d-]+ 一個或多個數字或連字符
Regex r = new Regex(@"^[\d-]+$");

完整修正方法

bool IsNotNumberOrHyphen(object val) {
    if (!SYUtil.IsValid(val) || string.IsNullOrEmpty(val.ToString()))
        return false;
    
    // 整串只能包含數字和連字符
    Regex r = new Regex(@"^[\d-]+$");
    
    if (!r.IsMatch(val.ToString())) {  // ❌ 不匹配才報錯
        MessageBox.Show("只能輸入數字及 [-]");
        return true;  // 返回 true 表示驗證失敗
    }
    return false;  // 驗證通過
}

正則詳解

符號含義
^字符串開頭
$字符串結尾
\d數字 [0-9]
-連字符 (在 [] 開頭/結尾不需轉義)
[\d-]字符集:數字或連字符
+量詞:1 次或多次
^[\d-]+$整串只由數字/連字符組成,至少一個字符

測試用例

var tests = new[] {
    "123", "12-34", "-123", "12-", "-",  // ✅ 合法
    "12a3", "12.3", "12 3", "", "abc"     // ❌ 非法
};

foreach (var t in tests) {
    Console.WriteLine($"{t,-6} => {Regex.IsMatch(t, @"^[\d-]+$")}");
}

進階:允許開頭可選負號,不允許中間/結尾連字符

// -?\d+  或  -?\d+(-\d+)*  (如 123, -123, 12-34-56)
Regex r = new Regex(@"^-?\d+(-\d+)*$");

最佳實踐

  • ✅ 使用 `^...$` 錨定整串匹配
  • ✅ 字符類 `[]` 中連字符放開頭或結尾避免轉義
  • ✅ 驗證邏輯:不匹配才報錯
  • ✅ 複雜驗證考慮 `System.ComponentModel.DataAnnotations` 屬性驗證

正則核心:`^[\d-]+$` 簡潔解決「只能輸入數字和連字符」需求。

  1. 上一篇文章:
  2. 下一篇文章:
HTML 頁面中可放置多組