国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#正則表達(dá)式開(kāi)源工具,為.net開(kāi)源綿盡薄力

2019-11-14 13:36:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

v0.寫(xiě)在前面

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

最近園子里的"月經(jīng)貼"越來(lái)越多,我就很納悶,這群人是不是閑的蛋疼?你有時(shí)間在這"指點(diǎn)江山"批評(píng)這個(gè)語(yǔ)言抨擊那個(gè)環(huán)境的,你還不如張開(kāi)雙手擁抱.net開(kāi)源大潮呢。隨著.net開(kāi)源的到來(lái),.net的春天也來(lái)了,我們應(yīng)該伸出雙手為.net開(kāi)源做一些事情,讓.net社區(qū)越來(lái)越開(kāi)源。當(dāng)然這是題外話,那些月經(jīng)貼也不關(guān)我啥事。

v1.源碼地址


https://github.com/toutouge/TouTou.RegexTool

v2.正文開(kāi)始

2.1.: 通用匹配

C#通用匹配規(guī)則,可以在調(diào)用的時(shí)候傳入源字符串和對(duì)應(yīng)的正則

        /// <summary>

        /// 檢測(cè)字符串中是否包含符合正則的子集

        /// </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>

        /// 檢測(cè)整個(gè)字符串是否能匹配正則,而不是包含

        /// </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>

        /// 從指定字符串中過(guò)濾出第一個(gè)符合正則匹配的子集

        /// </summary>

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

        /// <param name="reg">正則, e.g. /d+</param>

        /// <returns>源字符串的第一個(gè)匹配的子集</returns>

        publicstring GetFirstStringByReg(string source, string reg)

        {

            return Regex.Match(source, reg).Groups[0].Value;

        }

 

        /// <summary>

        /// 從指定字符串中過(guò)濾出所有符合正則匹配的子集

        /// </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.: 數(shù)字匹配

C#正則表達(dá)式根據(jù)各種需求匹配數(shù)字

        /// <summary>

        /// 從指定字符串中過(guò)濾出第一個(gè)數(shù)字

        /// </summary>

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

        /// <returns>源字符串的第一個(gè)數(shù)字</returns>

        publicstring GetFirstNumberByString(string source)

        {

            return Regex. Match(source, @"/d+").Groups[0].Value;

        }

 

        /// <summary>

        /// 從指定字符串中過(guò)濾出最后一個(gè)數(shù)字

        /// </summary>

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

        /// <returns>源字符串的最后一個(gè)數(shù)字</returns>

        publicstring GetLastNumberByString(string source)

        {

            var reg = Regex.Matches(source, @"/d+");

            return reg[reg.Count -1].Value;

        }

 

        /// <summary>

        /// 從指定字符串中過(guò)濾出所有數(shù)字

        /// </summary>

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

        /// <returns>源字符串的所有數(shù)字</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>

        /// 檢車(chē)源字符串中是否包含數(shù)字

        /// </summary>

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

        /// <returns>true:源字符串包含數(shù)字;false:源字符串不包含數(shù)字</returns>

        publicbool CheckNumberByString(string source)

        {

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

        }

 

        /// <summary>

        /// 判斷字符串是否全部是數(shù)字且長(zhǎng)度等于指定長(zhǎng)度

        /// </summary>

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

        /// <param name="length">指定長(zhǎng)度</param>

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

        publicbool CheckLengthByString(string source, int length)

        {

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

            return rg.IsMatch(source);

        }

2.3.: 正則截串

C#根據(jù)給定的起始字符截取起始之間的字符串

        /// <summary>

        /// 截取字符串中開(kāi)始和結(jié)束字符串中間的字符串

        /// </summary>

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

        /// <param name="startStr">開(kāi)始字符串</param>

        /// <param name="endStr">結(jié)束字符串</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#正則表達(dá)式匹配郵箱

        /// <summary>

        /// 匹配郵箱是否合法

        /// </summary>

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

        /// <returns>匹配結(jié)果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#正則表達(dá)式匹配URL

        /// <summary>

        /// 匹配URL是否合法

        /// </summary>

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

        /// <returns>匹配結(jié)果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#正則表達(dá)式匹配日期

        /// <summary>

        /// 匹配日期是否合法

        /// </summary>

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

        /// <returns>匹配結(jié)果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>

        /// 從字符串中獲取第一個(gè)日期

        /// </summary>

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

        /// <returns>源字符串中的第一個(gè)日期</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#正則表達(dá)式匹配密碼

        /// <summary>

        /// 檢測(cè)密碼復(fù)雜度是否達(dá)標(biāo):密碼中必須包含字母、數(shù)字、特稱(chēng)字符,至少8個(gè)字符,最多16個(gè)字符。

        /// </summary>

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

        /// <returns>密碼復(fù)雜度是否達(dá)標(biāo)true是達(dá)標(biāo)反之不達(dá)標(biāo)</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#正則表達(dá)式匹配郵編

        /// <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.: 電話號(hào)碼

C#正則表達(dá)式匹配電話

        /// <summary>

        /// 匹配電話號(hào)碼是否合法

        /// </summary>

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

        /// <returns>電話號(hào)碼合法返回true,反之不合法</returns>

        publicbool CheckTelephoneByString(string source)

        {

            Regex rg = new Regex(@"^(/(/d{3,4}-)|/d{3.4}-)?/d{7,8}$");

            return rg.IsMatch(source);

        }

 

        /// <summary>

        /// 從字符串中獲取電話號(hào)碼

        /// </summary>

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

        /// <returns>源字符串中電話號(hào)碼</returns>

        publicstring GetTelephoneByString(string source)

        {

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

        }

2.10.: 手機(jī)號(hào)碼

C#正則表達(dá)式匹配手機(jī)號(hào)碼

        /// <summary>

        /// 匹配手機(jī)號(hào)碼是否合法

        /// </summary>

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

        /// <returns>手機(jī)號(hào)碼合法返回true,反之不合法</returns>

        publicbool CheckMobilephoneByString(string source)

        {

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

            return rg.IsMatch(source);

        }

 

        /// <summary>

        /// 從字符串中獲取手機(jī)號(hào)碼

        /// </summary>

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

        /// <returns>源字符串中手機(jī)號(hào)碼</returns>

        publicstring GetMobilephoneByString(string source)

        {

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

        }

2.11.: 身份證匹配

C#正則表達(dá)式匹配身份證號(hào)碼

        /// <summary>

        /// 匹配身份證號(hào)碼是否合法

        /// </summary>

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

        /// <returns>身份證號(hào)碼合法返回true,反之不合法</returns>

        publicbool CheckIDCardByString(string source)

        {

            Regex rg = new Regex(@"^(^/d{15}$|^/d{18}$|^/d{17}(/d|X|x))$");

            return rg.IsMatch(source);

        }

 

        /// <summary>

        /// 從字符串中獲取身份證號(hào)碼

        /// </summary>

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

        /// <returns>源字符串中身份證號(hào)碼</returns>

        publicstring GetIDCardByString(string source)

        {

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

        }

v3.博客總結(jié)

關(guān)于C#正則表達(dá)式開(kāi)源工具暫時(shí)就只積累了這么多。因?yàn)槟壳皩?shí)際工作中遇到的也就這些,關(guān)于這個(gè)C#正則表達(dá)式開(kāi)源工具現(xiàn)在只是一個(gè)雛形,先把這一分不分享出來(lái),后續(xù)得會(huì)持續(xù)更新C#正則表達(dá)式開(kāi)源工具。希望在以后這個(gè)C#正則表達(dá)式工具會(huì)越來(lái)越strong,更希望能得到園友們的support.

 


作  者:請(qǐng)叫我頭頭哥
出  處:http://www.survivalescaperooms.com/toutou/
關(guān)于作者:專(zhuān)注于微軟平臺(tái)的項(xiàng)目開(kāi)發(fā)。如有問(wèn)題或建議,請(qǐng)多多賜教!
版權(quán)聲明:本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文鏈接。
特此聲明:所有評(píng)論和私信都會(huì)在第一時(shí)間回復(fù)。也歡迎園子的大大們指正錯(cuò)誤,共同進(jìn)步。或者直接私信我
聲援博主:如果您覺(jué)得文章對(duì)您有幫助,可以點(diǎn)擊文章右下角【推薦】一下。您的鼓勵(lì)是作者堅(jiān)持原創(chuàng)和持續(xù)寫(xiě)作的最大動(dòng)力!


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 澄江县| 福州市| 吉安市| 高碑店市| 开封县| 栖霞市| 化隆| 海伦市| 绥阳县| 塔城市| 宝山区| 许昌市| 保康县| 聂拉木县| 肇源县| 宁波市| 新源县| 铅山县| 江西省| 全椒县| 明星| 天等县| 横峰县| 酉阳| 昭平县| 靖宇县| 垫江县| 峨边| 涿鹿县| 嘉善县| 汝城县| 子洲县| 盘锦市| 开封县| 龙南县| 大埔县| 崇左市| 漠河县| 和田市| 通城县| 常州市|