程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 正則表達式實現資料驗證的技術總結

正則表達式實現資料驗證的技術總結

編輯:關於ASP.NET

資料驗證無論在C/S還是在B/S中的使用都是非常普遍的, 過去大家喜歡用一堆的 IF...else...判斷輸入的內容是否滿足要求.

如今很多語言都支持正則表達式, 它定義了一套自己的語法規則 (常見語法包括;字符匹配、重復匹配、字符定位、轉義匹配和其他高級語法)來完成各種資料的驗證, 功能之強大在我看來幾乎到了無敵的地步.

但是據我所了解(呵呵, 很可能是坐井觀天, 如果有讓哪位不爽請原諒我沒見過世面)很多很多自稱為(或他稱)程序員的在平時的工作中很少用到正則表達式, 不知道什麼原因, 可能是熟悉的環境比較安穩, 懶得求新; 也可能是當看到一長串諸如:

^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$的外星符號時眼眨暈, 不想求新;當然也可能是基本掌握了一些常用的資料驗證的正則表達式, 便不想再去了解其中的原理.

當然這種現象是好是壞不好評說, 每個人想的都會有所不同. 但我依然強烈建議學懂它, 掌握正則表達式的使用方法會給工作帶來很多方便, 因為它除了對於資料驗證游刃有余外, 還能查找和查找替換,能在文本和數據流裡測試特定的條件。能從大量的郵件中剔除垃圾郵件。在垃圾郵的回收應用中,程序使用正則表達式來判斷在來信欄內是否存在已知的垃圾郵件地址。郵件過濾程序通常都使用正則表達式來執行這個操作。

任何一種技術帶來好處的同時也帶來了很多不便, 正則表達式的強大也是基於它語法的復雜--可讀性非常非常差! 所以說你要想很好的使用正則表達式, 又不想花一天的時間看別人寫的那一長串外星字符, 只有自己把它學懂. 然後自已去寫.

附件一:

正則表達式語法:

字符 說明

\ 將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,“n”匹配字符“n”。“\n”匹配換行符。序列“\\”匹配“\”,“\(”匹配“(”。

^ 匹配輸入字符串開始的位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 還會與“\n”或“\r”之後的位置匹配。

$ 匹配輸入字符串結尾的位置。如果設置了 RegExp 對象的 Multiline 屬性,$ 還會與“\n”或“\r”之前的位置匹配。

* 零次或多次匹配前面的字符或子表達式。例如,zo* 匹配“z”和“zoo”。* 等效於 {0,}。

+ 一次或多次匹配前面的字符或子表達式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。+ 等效於 {1,}。

? 零次或一次匹配前面的字符或子表達式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效於 {0,1}。

{n} n 是非負整數。正好匹配 n 次。例如,“o{2}”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。

{n,} n 是非負整數。至少匹配 n 次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。'o{1,}' 等效於 'o+'。'o{0,}' 等效於 'o*'。

{n,m} m 和 n 是非負整數,其中 n <= m。至少匹配 n 次,至多匹配 m 次。例如,“o{1,3}”匹配“fooooood”中的頭三個 o。'o{0,1}' 等效於 'o?'。注意:您不能將空格插入逗號和數字之間。

? 當此字符緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之後時,匹配模式是“非貪心的”。“非貪心的”模式匹配搜索到的、盡可能短的字符串,而默認的“貪心的”模式匹配搜索到的、盡可能長的字符串。例如,在字符串“oooo”中,“o+?”只匹配單個“o”,而“o+”匹配所有“o”。

. 匹配除“\n”之外的任何單個字符。若要匹配包括“\n”在內的任意字符,請使用諸如“[\s\S]”之類的模式。

(pattern) 匹配 pattern 並捕獲該匹配的子表達式。可以使用 $0...$9 屬性從結果“匹配”集合中檢索捕獲的匹配。若要匹配括號字符 ( ),請使用“\(”或者“\)”。

(?:pattern) 匹配 pattern 但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以後使用的匹配。這對於用“或”字符 (|) 組合模式部件的情況很有用。例如,與“industry|industries”相比,“industr(?:y| ies)”是一個更加經濟的表達式。

(?=pattern) 執行正向預測先行搜索的子表達式,該表達式匹配處於匹配 pattern 的字符串的起始點的字符串。它是一個非捕獲匹配,即不能捕獲供以後使用的匹配。例如,“Windows (?=95| 98| NT| 2000)”與“Windows 2000”中的“Windows”匹配,但不與“Windows 3.1”中的“Windows”匹配。預測先行不占用字符,即發生匹配後,下一匹配的搜索緊隨上一匹配之後,而不是在組成預測先行的字符後。

(?!pattern) 執行反向預測先行搜索的子表達式,該表達式匹配不處於匹配 pattern 的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以後使用的匹配。例如,“Windows (?!95| 98| NT| 2000)”與“Windows 3.1”中的“Windows”匹配,但不與“Windows 2000”中的“Windows”匹配。預測先行不占用字符,即發生匹配後,下一匹配的搜索緊隨上一匹配之後,而不是在組成預測先行的字符後。

x| y 與 x 或 y 匹配。例如,“z| food”與“z”或“food”匹配。“(z| f)ood”與“zood”或“food”匹配。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved