亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#正則表達式開源工具,為.net開源綿盡薄力

2019-11-14 13:36:40
字體:
來源:轉載
供稿:網友

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

v0.寫在前面

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

最近園子里的"月經貼"越來越多,我就很納悶,這群人是不是閑的蛋疼?你有時間在這"指點江山"批評這個語言抨擊那個環境的,你還不如張開雙手擁抱.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)

        {

            return Regex.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 = new Regex(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)

        {

            return Regex.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 =new List<string>();

            foreach (Match item in regex)

            {

                list.Add(item.Value);

            }

 

            return list;

        }

2.2.: 數字匹配

C#正則表達式根據各種需求匹配數字

        /// <summary>

        /// 從指定字符串中過濾出第一個數字

        /// </summary>

        /// <param name="source">源字符串</param>

        /// <returns>源字符串的第一個數字</returns>

        publicstring GetFirstNumberByString(string source)

        {

            return Regex. 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 =new List<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)

        {

            return Regex. Match(source, @"/d").Success;

        }

 

        /// <summary>

        /// 判斷字符串是否全部是數字且長度等于指定長度

        /// </summary>

        /// <param name="source">源字符串</param>

        /// <param name="length">指定長度</param>

        /// <returns>返回值</returns>

        publicbool CheckLengthByString(string source, int length)

        {

            Regex rg = new Regex(@"^/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 = new Regex("(?<=(" + startStr +"))[.//s//S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline);

            return rg.Match(source).Value;

        }

2.4.: 郵箱匹配

C#正則表達式匹配郵箱

        /// <summary>

        /// 匹配郵箱是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>匹配結果true是郵箱反之不是郵箱</returns>

        publicbool CheckEmailByString(string source)

        {

            Regex rg = new Regex("^//s*([A-Za-z0-9_-]+(//.//w+)*@(//w+//.)+//w{2,5})//s*$", RegexOptions.IgnoreCase);

            return rg.IsMatch(source);

        }

2.5.: URL匹配

C#正則表達式匹配URL

        /// <summary>

        /// 匹配URL是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>匹配結果trueURL反之不是URL</returns>

        publicbool CheckURLByString(string source)

        {

            Regex rg = new Regex(@"^(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#正則表達式匹配日期

        /// <summary>

        /// 匹配日期是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>匹配結果true是日期反之不是日期</returns>

        publicbool CheckDateByString(string source)

        {

            Regex rg = new Regex(@"^(/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)

        {

            return Regex.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 =new List<string>();

            foreach (Match item in all)

            {

                list.Add(item.Value);

            }

            return list;

        }

2.7.: 密碼匹配

C#正則表達式匹配密碼

        /// <summary>

        /// 檢測密碼復雜度是否達標:密碼中必須包含字母、數字、特稱字符,至少8個字符,最多16個字符。

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>密碼復雜度是否達標true是達標反之不達標</returns>

        publicbool CheckPassWordByString(string source)

        {

            Regex rg = new Regex(@"^(?=.*/d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$");

            return rg.IsMatch(source);

        }

2.8.: 郵編匹配

C#正則表達式匹配郵編

        /// <summary>

        /// 匹配郵編是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>郵編合法返回true,反之不合法</returns>

        publicbool CheckPostcodeByString(string source)

        {

            Regex rg = new Regex(@"^/d{6}$");

            return rg.IsMatch(source);

        }

2.9.: 電話號碼

C#正則表達式匹配電話

        /// <summary>

        /// 匹配電話號碼是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>電話號碼合法返回true,反之不合法</returns>

        publicbool CheckTelephoneByString(string source)

        {

            Regex rg = new Regex(@"^(/(/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)

        {

            return Regex. Match(source, @"(/(/d{3,4}-)|/d{3.4}-)?/d{7,8}").Groups[0].Value;

        }

2.10.: 手機號碼

C#正則表達式匹配手機號碼

        /// <summary>

        /// 匹配手機號碼是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>手機號碼合法返回true,反之不合法</returns>

        publicbool CheckMobilephoneByString(string source)

        {

            Regex rg = new Regex(@"^[1]+[3,5,7,8]+/d{9}$");

            return rg.IsMatch(source);

        }

 

        /// <summary>

        /// 從字符串中獲取手機號碼

        /// </summary>

        /// <param name="source">源字符串</param>

        /// <returns>源字符串中手機號碼</returns>

        publicstring GetMobilephoneByString(string source)

        {

            return Regex. Match(source, @"[1]+[3,5,7,8]+/d{9}").Groups[0].Value;

        }

2.11.: 身份證匹配

C#正則表達式匹配身份證號碼

        /// <summary>

        /// 匹配身份證號碼是否合法

        /// </summary>

        /// <param name="source">待匹配字符串</param>

        /// <returns>身份證號碼合法返回true,反之不合法</returns>

        publicbool CheckIDCardByString(string source)

        {

            Regex rg = new Regex(@"^(^/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)

        {

            return Regex.Match(source, @"(^/d{15}$|^/d{18}$|^/d{17}(/d|X|x))").Groups[0].Value;

        }

v3.博客總結

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

 


作  者:請叫我頭頭哥
出  處:http://www.49028c.com/toutou/
關于作者:專注于微軟平臺的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步?;蛘咧苯铀叫盼?
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩网| 国产欧美一区二区三区视频| 在线视频欧美日韩精品| 午夜精品福利在线观看| 国产欧洲精品视频| 国产精品久久久久av| 国产精品色视频| 精品综合久久久久久97| 久久久久免费精品国产| 亚洲欧美精品伊人久久| 亚洲欧洲国产伦综合| 久久久久久亚洲精品| 国内精品久久影院| www日韩欧美| 国产一区二区三区视频在线观看| 国产精品日韩在线观看| 欧美日韩亚洲激情| 欧美日韩中文字幕综合视频| 久久久久久91香蕉国产| 精品一区二区三区四区| 国产精品久久久久久中文字| 九九精品在线视频| 日韩免费在线免费观看| 91欧美激情另类亚洲| 中文字幕亚洲欧美日韩高清| 秋霞av国产精品一区| 久久精品视频中文字幕| 中文字幕精品影院| 亚洲欧美日韩国产成人| 欧美激情极品视频| 在线观看精品自拍私拍| 色香阁99久久精品久久久| 91精品久久久久久久久不口人| 亚洲成人精品视频| 国产美女主播一区| 久久九九精品99国产精品| 国产精品免费久久久久影院| 国产主播精品在线| 欧美性猛交xxxx乱大交极品| 亚洲美女在线看| 国内精品一区二区三区| 日韩电影免费在线观看中文字幕| 久久精品久久久久电影| 97热在线精品视频在线观看| 中文字幕精品影院| 国产精品视频一区二区三区四| 欧美在线精品免播放器视频| 欧美黄色www| 美日韩精品免费观看视频| 国产精品入口日韩视频大尺度| 国产在线高清精品| 三级精品视频久久久久| 亚洲欧美在线播放| 久久综合免费视频影院| 久久伊人免费视频| 欧美日韩中国免费专区在线看| 日韩电影中文字幕一区| 尤物九九久久国产精品的分类| 欧美性xxxx极品hd欧美风情| 亚洲精品白浆高清久久久久久| 中文国产成人精品| 成人免费高清完整版在线观看| 国产va免费精品高清在线观看| 久久精品色欧美aⅴ一区二区| 国产精品综合不卡av| 91免费视频网站| 亚洲第一区中文99精品| 午夜欧美不卡精品aaaaa| 国产99在线|中文| 亚洲国产成人久久综合一区| 亚洲精品国产欧美| 91免费的视频在线播放| 日韩视频免费中文字幕| 亚洲激情视频在线播放| 日韩精品在线观看视频| 亚洲第一免费播放区| 日韩亚洲国产中文字幕| 久久成人人人人精品欧| 亚洲欧美一区二区激情| 亚洲精品白浆高清久久久久久| 欧美三级免费观看| 国产成人精品视频在线| 欧美有码在线观看视频| 中文字幕一区二区三区电影| www.久久久久| 日韩欧美国产免费播放| 国产精品久久久久久久久久久久久| 欧美成人h版在线观看| 亚洲成色www8888| 精品偷拍一区二区三区在线看| 日韩电影大全免费观看2023年上| 日韩精品免费一线在线观看| 亚洲欧美一区二区激情| 日韩av网址在线观看| 国产精品∨欧美精品v日韩精品| 亚洲男人av电影| 在线观看免费高清视频97| 成人免费视频网| www高清在线视频日韩欧美| 亚洲综合一区二区不卡| 国产精品大片wwwwww| 精品久久久久久久久久ntr影视| 国产日韩精品在线| 在线观看日韩av| 蜜月aⅴ免费一区二区三区| 久久躁狠狠躁夜夜爽| 国产精品久久久一区| 国产精品视频永久免费播放| 91精品视频免费观看| 欧美日韩国产成人在线观看| 亚洲天堂av女优| 国产国语videosex另类| 日韩视频在线观看免费| 91精品视频免费观看| 亚洲精品日韩欧美| 欧美成人亚洲成人| 国产一区二区三区视频| 68精品久久久久久欧美| 日韩精品在线免费播放| 91精品久久久久久久久中文字幕| 国产亚洲精品综合一区91| 久久亚洲春色中文字幕| 97国产真实伦对白精彩视频8| 欧美性xxxx在线播放| 精品久久久久久久久久国产| 91精品国产色综合久久不卡98| 欧美精品一二区| 两个人的视频www国产精品| 国产婷婷色综合av蜜臀av| 91经典在线视频| 亚洲第一福利网站| 中文字幕视频一区二区在线有码| 中文字幕亚洲第一| 欧美午夜丰满在线18影院| 精品国产一区二区在线| 亚洲欧美国产一区二区三区| 国产亚洲欧洲在线| 欧美极品美女视频网站在线观看免费| 在线观看欧美视频| 色av吧综合网| 精品一区二区三区电影| 欧美日韩美女视频| 97久久国产精品| 亚洲国产精品国自产拍av秋霞| 亚洲一区二区三区成人在线视频精品| 亚洲91精品在线| 77777亚洲午夜久久多人| 91超碰中文字幕久久精品| 精品无人区太爽高潮在线播放| 亚洲精品自产拍| 欧美亚洲免费电影| 国产亚洲人成网站在线观看| 欧美日本啪啪无遮挡网站| 国产精品扒开腿做爽爽爽的视频| 欧美一区二区三区免费观看| 欧美成aaa人片免费看| 中文字幕综合一区| 亚洲天堂av综合网| 久久久在线观看| 久久精彩免费视频| 成人免费福利在线| 亚洲色在线视频| 美女黄色丝袜一区| 久热爱精品视频线路一|