驗證控制項介紹--RegularExpressionValidator

來源:互聯網
上載者:User
express|控制項    我們在製作網站的時候,尤其是各種電子商務網站,首先都會讓使用者填寫一些表格來擷取註冊使用者的各種資訊,因為使用者有可能輸入各式各樣的資訊,而有些不符合要求的資料會給我們的後端ASP處理常式帶來不必要的麻煩,甚至導致網站出現一些安全問題。因此我們在將這些資訊儲存到網站的資料庫之前,要對這些使用者所輸入的資訊進行資料的合法性校正,以便後面的程式可以安全順利的執行。
    使用RegularExpressionValidator伺服器控制項,可以用來檢查我們輸入的資訊是否和我們的自訂的運算式一致。比方說用它可以檢查e-mail地址,電話號碼等合法性。
在講述RegularExpressionValidator伺服器控制項使用之前,我們先來瞭解一下Regex(RegularExpression)的來源:
Regex的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網路。1956 年, 一位叫 Stephen Kleene 的美國數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的標記法”的論文,引入了Regex的概念。Regex就是用來描述他稱為“正則集的代數”的運算式,因此採用“Regex”這個術語。隨後,發現可以將這一工作應用於使用Ken Thompson 的計算搜尋演算法的一些早期研究,Ken Thompson是Unix 的主要發明人。Regex的第一個實用應用程式就是 Unix 中的qed 編輯器。如他們所說,剩下的就是眾所周知的曆史了。從那時起直至現在Regex都是基於文本的編輯器和搜尋工具中的一個重要部分。
    其實,Regex(RegularExpression)是一個Regex就是由一般字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在尋找文字主體時待匹配的一個或多個字串。Regex作為一個模板,將某個字元模式與所搜尋的字串進行匹配。       
    使用Regex,就可以:
    1. 測試字串的某個模式。例如,可以對一個輸入字串進行測試,看在該字串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為資料有效性驗證。
    2. 替換文本。可以在文檔中使用一個Regex來標識特定文字,然後可以全部將其刪除,或者替換為別的文字。
    3. 根據模式比對從字串中提取一個子字串。可以用來在文本或輸入欄位中尋找特定文字。
    例如,如果需要搜尋整個 web 網站來刪除某些過時的材料並替換某些HTML 格式化標記,則可以使用Regex對每個檔案進行測試,看在該檔案中是否存在所要尋找的材料或 HTML 格式化標記。用這個方法,就可以將受影響的檔案範圍縮小到包含要刪除或更改的材料的那些檔案。然後可以使用Regex來刪除過時的材料,最後,可以再次使用Regex來尋找並替換那些需要替換的標記。
    另一個說明Regex非常有用的樣本是一種其字串處理能力還不為人所知的語言。VBScript 是 Visual Basic 的一個子集,具有豐富的字串處理功能。與 C 類似的 Visual Basic Scripting Edition 則沒有這一能力。Regex給 Visual Basic Scripting Edition 的字串處理能力帶來了明顯改善。不過,可能還是在 VBScript 中使用Regex的效率更高,它允許在單個運算式中執行多個字串操作。
正是由於“Regex”的強大功能,才使得微軟慢慢將Regex對象移植到了視窗系統上面。在書寫Regex的模式時使用了特殊的字元和序列。下表描述了可以使用的字元和序列,並給出了執行個體。
字元描述: \:將下一個字元標記為特殊字元或字面值。例如"n"與字元"n"匹配。"\n"與分行符號匹配。序列"\\"與"\"匹配,"\("與"("匹配。
    ^ :匹配輸入的開始位置。
$ :匹配輸入的結尾。
* :匹配前一個字元零次或幾次。例如,"zo*"可以匹配"z"、"zoo"。
+ :匹配前一個字元一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。
? :匹配前一個字元零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。
.:匹配分行符號以外的任何字元。
(pattern) 與模式比對並記住匹配。匹配的子字串可以從作為結果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括弧字元(和 ),可使用"\(" 或 "\)"。
x|y:匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zoo" 或 "food"。
{n}:n 為非負的整數。匹配恰好n次。例如,"o{2}" 不能與 "Bob 中的 "o" 匹配,但是可以與"foooood"中的前兩個o匹配。
{n,} :n 為非負的整數。匹配至少n次。例如,"o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o。"o{1,}"等價於"o+"。"o{0,}"等價於"o*"。
{n,m} :m 和 n 為非負的整數。匹配至少 n 次,至多 m 次。例如,"o{1,3}" 匹配 "fooooood"中前三個o。"o{0,1}"等價於"o?"。
[xyz] :一個字元集。與括弧中字元的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。
[^xyz] :一個否定的字元集。匹配不在此括弧中的任何字元。例如,"[^abc]" 可以匹配"plain"中的"p".
[a-z] :表示某個範圍內的字元。與指定區間內的任何字元匹配。例如,"[a-z]"匹配"a"與"z"之間的任何一個小寫字母字元。
[^m-z] :否定的字元區間。與不在指定區間內的字元匹配。例如,"[m-z]"與不在"m"到"z"之間的任何字元匹配。
\b :與單詞的邊界匹配,即單詞與空格之間的位置。例如,"er\b" 與"never"中的"er"匹配,但是不匹配"verb"中的"er"。
\B :與非單詞邊界匹配。"ea*r\B"與"never early"中的"ear"匹配。
\d :與一個數字字元匹配。等價於[0-9]。
\D :與非數位字元匹配。等價於[^0-9]。
\f :與分頁符匹配。
\n :與分行符號字元匹配。
\r :與斷行符號字元匹配。
\s :與任何白字元匹配,包括空格、定位字元、分頁符等。等價於"[ \f\n\r\t\v]"。
\S :與任何非空白的字元匹配。等價於"[^ \f\n\r\t\v]"。
\t :與定位字元匹配。
\v :與垂直定位字元匹配。
\w :與任何單詞字元匹配,包括底線。等價於"[A-Za-z0-9_]"。
\W :與任何非單詞字元匹配。等價於"[^A-Za-z0-9_]"。
\num :匹配 num個,其中 num 為一個正整數。引用回到記住的匹配。例如,"(.)\1"匹配兩個連續的相同的字元。
\n:匹配 n,其中n 是一個八進位換碼值。八進位換碼值必須是 1, 2 或 3 個數字長。
例如,"\11" 和 "\011" 都與一個定位字元匹配。"\0011"等價於"\001" 與 "1"。八進位換碼值不得超過 256。否則,只有前兩個字元被視為運算式的一部分。允許在Regex中使用ASCII碼。
\xn:匹配n,其中n是一個十六進位的換碼值。十六進位換碼值必須恰好為兩個數字長。例如,"\x41"匹配"A"。"\x041"等價於"\x04" 和 "1"。允許在Regex中使用 ASCII 碼。
    RegularExpressionValidator有兩種主要的屬性來進行有效性驗證。ControlToValidate 包含了一個值進行驗證。如取出文字框中的值。如ControlToValidate="TextBox1" ValidationExpression 包含了一個Regex進行驗證。
好了,有了上面的敘述,我們就舉個例子來說明Regex。比如,我們想要對使用者輸入的電子郵件進行校正,那麼,什麼樣的資料才算是一個合法的電子郵件呢?我可以這樣輸入:test@yesky.com,當然我也會這樣輸入:xxx@yyy.com.cn,但是這樣的輸入就是非法的:xxx@@com.cn或者@xxx.com.cn,等等,所以我們得出一個合法的電子郵件地址至少應當滿足以下幾個條件:
1. 必須包含一個並且只有一個符號“@”
2. 第一個字元不得是“@”或者“.”
3. 不允許出現“@.”或者.@
4. 結尾不得是字元“@”或者“.”
所以根據以上的原則和上面表中的文法,我們很容易的就可以得到需要的模板如下:"= "^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$"
請看validata6.aspx的內容:

<!--源檔案:form\web頁面簡介\validate6.aspx-->
</head>
<body>
<center><h3><font face="Verdana">使用Regex驗證</font></h3></center>
<p>
<form runat="server">
<center>
<title>使用Regex驗證</title>
    <table bgcolor="#eeeeee" cellpadding=10>
    <tr valign="top">
      <td colspan=3>
        <asp:Label ID="lblOutput" Text="輸入E-mail地址" Font-Name="Verdana" Font-Size="10pt" runat="server"/>
      </td>
    </tr>
    <tr>
      <td align=right>
        <font face=Verdana size=2>E-mail:</font>
      </td>
      <td>
        <ASP:TextBox id=TextBox1 runat=server />
      </td>
      <td>
        <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server"
            ControlToValidate="TextBox1"
            ValidationExpression="^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$"
            Display="Static"
            Font-Name="verdana"
            Font-Size="10pt">
               請輸入有效E-mail地址!
        </asp:RegularExpressionValidator>
      </td>
    </tr>
    <tr>
      <td></td>
      <td>
        <ASP:Button text="驗證" OnClick="ValidateBtn_Click" runat=server />
      </td>
      <td></td>
    </tr>
    </table>
</center>
</form>
</body>
</html>

   這樣,我們只要定製不同的模板,就可以實現對不同資料的合法性校正了。所以,Regex對象中最重要的屬性就是:“Pattern”屬性,只要真正掌握了這個屬性,才可以自由的運用Regex對象來為我們的資料校正進行服務。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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