C#Regex開源工具

來源:互聯網
上載者:User
先交代一下背景,最近工作中經常用到Regex,而Regex這個東西我個人覺得很雞肋,不用吧,有些功能實現起來會很麻煩。用吧,又不是說工作中經常用到,只是有時候有些需要求用到而已。但是Regex只要一段時間不用,就會被遺忘,甚至是忘的一乾二淨。為了一定程度上解決這個雞肋的問題,就有了這篇部落格和我打算寫的這個開源的Regex驗證工具的想法。關於正則網上的資料其實已經很多了,之所以還寫這篇部落格只是為了記錄一些現在或者以後工作中可能會用到的正則,然後分享出來,同時也是希望為.net開源做一些事情。

0.寫在前面

記得上一次正兒八經的用Regex還是三年前,雖然期間也零零散散的用過一些,但是基本已經忘的差不多了,所以這篇部落格中如果有什麼不對的地方歡迎和感謝大家指正!這裡我只是寫出了一些個人工作中常用到的正則匹配,如果同時有園友願意貢獻一份力量參與到正則開源工具的編碼中,我會非常歡迎。

最近園子裡的"月經貼"越來越多,我就很納悶,這群人是不是閑的蛋疼?你有時間在這"指點江山"批評這個語言抨擊那個環境的,你還不如張開雙手擁抱.net開源大潮呢。隨著.net開源的到來,.net的春天也來了,我們應該伸出雙手為.net開源做一些事情,讓.net社區越來越開源。當然這是題外話,那些月經貼也不關我啥事。

v1.源碼地址

https://github.com/toutouge/TouTou.RegexTool回到頂部

v2.本文開始

2.1.: 通用匹配

C#通用匹配規則,可以在調用的時候傳入源字串和對應的正則

/// <summary>/// 檢測字串中是否包含符合正則的子集/// </summary>/// <param name="source">源字串</param>/// <param name="reg">正則, e.g. \d+</param>/// <returns>true:包含,反之不包含</returns>publicbool CheckContainsByReg(string source, string reg){returnRegex.Match(source, reg).Success;}/// <summary>/// 檢測整個字串是否能匹配正則,而不是包含/// </summary>/// <param name="source">源字串</param>/// <param name="reg">正則, e.g. ^\d+$</param>/// <returns>true:匹配,反之不匹配</returns>publicbool CheckStringByReg(string source, string reg){Regex rg = newRegex(reg, RegexOptions.IgnoreCase);return rg.IsMatch(source);}/// <summary>/// 從指定字串中過濾出第一個符合正則匹配的子集/// </summary>/// <param name="source">源字串</param>/// <param name="reg">正則, e.g. \d+</param>/// <returns>源字串的第一個匹配的子集</returns>publicstring GetFirstStringByReg(string source, string reg){returnRegex.Match(source, reg).Groups[0].Value;}/// <summary>/// 從指定字串中過濾出所有符合正則匹配的子集/// </summary>/// <param name="source">源字串</param>/// <param name="reg">正則, e.g. \d+</param>/// <returns>true:匹配,反之不匹配</returns>publicList<string> GetStringByReg(string source, string reg){var regex = Regex.Matches(source, reg);List<string> list =newList<string>();foreach (Match item in regex){list.Add(item.Value);}return list;}

2.2.: 數字匹配

C#Regex根據各種需求匹配數字

/// <summary>/// 從指定字串中過濾出第一個數字/// </summary>/// <param name="source">源字串</param>/// <returns>源字串的第一個數字</returns>publicstring GetFirstNumberByString(string source){returnRegex. Match(source, @"\d+").Groups[0].Value;}/// <summary>/// 從指定字串中過濾出最後一個數字/// </summary>/// <param name="source">源字串</param>/// <returns>源字串的最後一個數字</returns>publicstring GetLastNumberByString(string source){var reg = Regex.Matches(source, @"\d+");return reg[reg.Count -1].Value;}/// <summary>/// 從指定字串中過濾出所有數字/// </summary>/// <param name="source">源字串</param>/// <returns>源字串的所有數字</returns>publicList<string> GetAllNumberByString( string source){var reg = Regex.Matches(source, @"\d+");List<string> list =newList<string>();foreach (Match item in reg){list.Add(item.Value);}return list;}/// <summary>/// 檢車源字串中是否包含數字/// </summary>/// <param name="source">源字串</param>/// <returns>true:源字串包含數字;false:源字串不包含數字</returns>publicbool CheckNumberByString(string source){returnRegex. Match(source, @"\d").Success;}/// <summary>/// 判斷字串是否全部是數字且長度等於指定長度/// </summary>/// <param name="source">源字串</param>/// <param name="length">指定長度</param>/// <returns>傳回值</returns>publicbool CheckLengthByString(string source, int length){Regex rg = newRegex(@"^\d{" + length +"}$");return rg.IsMatch(source);}

2.3.: 正則截串

C#根據給定的起始字元截取起始之間的字串

/// <summary>/// 截取字串中開始和結束字串中間的字串/// </summary>/// <param name="source">源字串</param>/// <param name="startStr">開始字串</param>/// <param name="endStr">結束字串</param>/// <returns>中間字串</returns>publicstring Substring(string source, string startStr, string endStr){Regex rg = newRegex("(?<=(" + startStr +"))[.\\s\\S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline);return rg.Match(source).Value;}

2.4.: 郵箱匹配

C#Regex匹配郵箱

/// <summary>/// 匹配郵箱是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>匹配結果true是郵箱反之不是郵箱</returns>publicbool CheckEmailByString(string source){Regex rg = newRegex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$", RegexOptions.IgnoreCase);return rg.IsMatch(source);}

2.5.: URL匹配

C#Regex匹配URL

/// <summary>/// 匹配URL是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>匹配結果true是URL反之不是URL</returns>publicbool CheckURLByString(string source){Regex rg = newRegex(@"^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , RegexOptions.IgnoreCase);return rg.IsMatch(source);}

2.6.: 日期匹配

C#Regex匹配日期

/// <summary>/// 匹配日期是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>匹配結果true是日期反之不是日期</returns>publicbool CheckDateByString(string source){Regex rg = newRegex(@"^(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})$");return rg.IsMatch(source);}/// <summary>/// 從字串中擷取第一個日期/// </summary>/// <param name="source">源字串</param>/// <returns>源字串中的第一個日期</returns>publicstring GetFirstDateByString(string source){returnRegex.Match(source,@"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})").Groups[0].Value;}/// <summary>/// 從字串中擷取所有的日期/// </summary>/// <param name="source">源字串</param>/// <returns>源字串中的所有日期</returns>publicList<string> GetAllDateByString( string source){var all = Regex.Matches(source, @"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})");List<string> list =newList<string>();foreach (Match item in all){list.Add(item.Value);}return list;}

2.7.: 密碼匹配

C#Regex匹配密碼

/// <summary>/// 檢測密碼複雜度是否達標:密碼中必須包含字母、數字、特稱字元,至少8個字元,最多16個字元。/// </summary>/// <param name="source">待匹配字串</param>/// <returns>密碼複雜度是否達標true是達標反之不達標</returns>publicbool CheckPasswordByString(string source){Regex rg = newRegex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$");return rg.IsMatch(source);}

2.8.: 郵編匹配

C#Regex匹配郵編

/// <summary>/// 匹配郵編是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>郵編合法返回true,反之不合法</returns>publicbool CheckPostcodeByString(string source){Regex rg = newRegex(@"^\d{6}$");return rg.IsMatch(source);}

2.9.: 電話號碼

C#Regex匹配電話

/// <summary>/// 匹配電話號碼是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>電話號碼合法返回true,反之不合法</returns>publicbool CheckTelephoneByString(string source){Regex rg = newRegex(@"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$");return rg.IsMatch(source);}/// <summary>/// 從字串中擷取電話號碼/// </summary>/// <param name="source">源字串</param>/// <returns>源字串中電話號碼</returns>publicstring GetTelephoneByString(string source){returnRegex. Match(source, @"(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}").Groups[0].Value;}

2.10.: 手機號碼

C#Regex匹配手機號碼

/// <summary>/// 匹配手機號碼是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>手機號碼合法返回true,反之不合法</returns>publicbool CheckMobilephoneByString(string source){Regex rg = newRegex(@"^[1]+[3,5,7]+\d{9}$");return rg.IsMatch(source);}/// <summary>/// 從字串中擷取手機號碼/// </summary>/// <param name="source">源字串</param>/// <returns>源字串中手機號碼</returns>publicstring GetMobilephoneByString(string source){returnRegex. Match(source, @"[1]+[3,5,7]+\d{9}").Groups[0].Value;}

2.11.: 身份證匹配

C#Regex匹配社會安全號碼碼

/// <summary>/// 匹配社會安全號碼碼是否合法/// </summary>/// <param name="source">待匹配字串</param>/// <returns>社會安全號碼碼合法返回true,反之不合法</returns>publicbool CheckIDCardByString(string source){Regex rg = newRegex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");return rg.IsMatch(source);}/// <summary>/// 從字串中擷取社會安全號碼碼/// </summary>/// <param name="source">源字串</param>/// <returns>源字串中社會安全號碼碼</returns>publicstring GetIDCardByString(string source){returnRegex. Match(source, @"(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))").Groups[0].Value;}

v3.部落格總結

關於C#Regex開源工具暫時就只積累了這麼多。因為目前實際工作中遇到的也就這些,關於這個C#Regex開源工具現在只是一個雛形,先把這一分不分享出來,後續得會持續更新C#Regex開源工具。希望在以後這個C#Regex工具會越來越strong,更希望能得到園友們的support.

以上就是C#Regex開源工具的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.