1. 程式人生 > >【C#拾遺】——正則表示式RegEx

【C#拾遺】——正則表示式RegEx

前提

    公司內部推行安全制度,要求密碼必須是八位以上,而且必有至少包含一個小寫或者大寫字母,數字,特殊字元,面對這樣的密碼,感覺領導也是夠操心的了啊。在公司小編真是閒啊,所以動手實現了一下,後來看了人家的程式碼,發現自己太low了。

    我就不說那很low的做法了,使用了C#中正則表示式Regex直接進行驗證。直接看程式碼

using System.Text.RegularExpressions;
 string s =
@"
(?=.*[0-9])                         #必須包含數字
(?=.*[a-zA-Z])                      #必須包含小寫或大寫字母
(?=([\x21-\x7e]+)[^a-zA-Z0-9])      #必須包含特殊符號
.{8,30}                             #至少8個字元,最多30個字元
";
 Regex reg = new Regex(s, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
            if (!reg.IsMatch(textBox1.Text.Trim()))
            {
                MessageBox.Show("密碼必須包含8個字元,\r\n並且至少有1個大寫字母、\r\n1個小寫字母、\r\n1個數字、\r\n1個特殊字元!");
                textBox1.Focus();
                return;
            }
   

    使用C#中的正則表示式,一個輸入格式,兩行校驗程式碼,就這麼簡單的解決了這個問題。既然提到了正則表示式,那就好好的學習一下吧。

在C#中使用引入正則表示式

using System.Text.RegularExpressions;
之後就是關於正則表示式使用的一些基本語法了。

判斷是否匹配

在Regex物件中,可以使用Regex.IsMatch(string)方法。

如果返回值為false,字串中未包含要求匹配的內容,預設值為true,則證明字串中包含,符合條件。

    關於匹配的問題還會涉及到Matches集合,再利用Matches集合進行獲取匹配次數,獲取匹配內容,以及捕獲正則表示式中的內容。

Regex.Matches("abc123Count").count;

RegexOptions方法,指的的列舉,其中列舉的有效值有很多,具體的內容推薦一篇部落格《C#正則表示式Regex類的用法》在這主要講解兩個,因為這段程式碼中用到的啊。

1、IgnorePatternWhitespace表示去掉模式中的非轉義空白,並啟用由#標記的註釋,這個注意到我們的程式碼中是有#標識的註釋的。

2、Multiline表示多行模式,改變元字元^和$的含義,它們可以匹配行的開頭和結尾,在C#中^和$是有特殊意義的,所以要考慮全面啊。

    這是C#中正則表示式非常基礎的應用,其實之前在JavaScript中也學習過著這些內容,但是僅僅是學習過而已。大家都知道語言是相通,可是就是沒有學過真正的讓語言變得靈活起來,還是需要慢慢學習啊。

【總結】

    關於C#中的學習真是學無止境,自己會的太少了,還是慢慢積累吧,把語言靈活運用起來,這才是目標啊。