正則表達式是字串驗證、清理、轉換與擷取的利器。本文示範四個常見應用場景,提供 C# 與 VB.NET 雙語言範例。
使用 Regex.IsMatch 靜態方法快速驗證:
// C#
bool IsValidEmail(string strIn) {
return Regex.IsMatch(strIn,
@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
' VB.NET
Function IsValidEmail(strIn As String) As Boolean
Return Regex.IsMatch(strIn, _
"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
End Function
應用場景: 存入資料庫前過濾無效郵件格式。
使用 Regex.Replace 保留英數字、@、-、.,其餘移除:
// C#
string CleanInput(string strIn) {
return Regex.Replace(strIn, @"[^\w.@-]", "");
}
' VB.NET
Function CleanInput(strIn As String) As String
Return Regex.Replace(strIn, "[^\w.@-]", "")
End Function
應用場景: 淨化使用者輸入,防止注入攻擊或髒資料。
使用具名捕獲群組(?<name>)與取代模式 ${name}:
// C#
string MDYToDMY(string input) {
return Regex.Replace(input,
@"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
"${day}-${month}-${year}");
}
' VB.NET
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
"${day}-${month}-${year}")
End Function
技巧: 靜態 Regex.Replace 避免顯式建立 Regex 物件,適合一次性操作。
使用 Match.Result 方法搭配具名群組:
// C#
string Extension(string url) {
Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>\d+)?/", RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}
' VB.NET
Function Extension(url As String) As String
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>\d+)?/", RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
範例: "https://www.example.com:8080/letters/readme.html" → "http8080"
善用 Regex.IsMatch、Regex.Replace、Match.Result 等靜態/實例方法,配合具名群組與編譯選項,能編寫高效、可維護的字串處理邏輯。