孫立友+梁宏英
摘要:在網站制作,尤其是應用B/S(Browser/Server,瀏覽器/服務器)架構的動態網站,表單扮演了非常重要的角色,它是客戶端向服務器提交數據的載體。為了保證表單提交數據的合法性,需要對提交的某些關鍵數據進行驗證。本文主要論述如何應用正則表達式驗證表單數據,并給出了幾類常用的表單驗證正則表達式。
關鍵詞:表單;正則表達式;網站制作
中圖分類號:TP31 文獻標識碼:A 文章編號:1007-9416(2017)01-0236-01
正則表達式是用于模式匹配和替換的有力工具,它既可以用于數據有效性驗證,如測試字符串是否匹配某種模式;又可以用于替換文本,即在文檔中使用正則表達式查找標識特定文字,然后進行替換或刪除;還可以根據模式匹配從字符串中提取一個子字符串,用來在指定文本或輸入數據中查找特定文字。正則表達式功能十分強大,但是又非常簡潔。本文主要闡述正則表達式的基本內涵,及它在網站表單數據驗證中的應用。
1 正則表達式概述
正則表達式,又稱正規表示法、常規表示法(Regular Expression,常簡寫為regex、regexp或RE),在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串,即用事先定義好的一些特定字符及這些字符的組合,組成一個“規則字符串”,用來表達對字符串的一種過濾邏輯。所謂匹配,是指在給定的字符串中,查找與給定的正則表達式相匹配的部分,滿足條件的可能不止一個,每一個滿足條件的部分都被稱為一個匹配。例如,最簡單正則表達式"is"可以匹配“this”、“his”等字符串,但是不能匹配"Island"。
給定一個正則表達式和另一個字符串,可以驗證給定的字符串是否符合正則表達式的過濾邏輯(又稱“匹配”),或者可以從字符串中獲取我們想要的特定部分。在編寫處理字符串的程序或網頁時,經常需要驗證或查找符合某些復雜規則的字符串,正則表達式就非常適用于描述這些復雜的文本規則。因為正則表達式的主要應用對象是文本,所以可以說正則表達式是用于文本匹配的工具。
2 正則表達式語法
正則表達式主要由普通字符和特殊字符(又稱元字符)組成。普通字符主要包含英文字母a-z/A-Z、數字0-9等,而特殊字符都具有特殊的含義,比如,特殊字符“\d”可以匹配任意一位數字,而“\w”則可以匹配字母、數字或下劃線字符,還有匹配子表達式出現次數的“*”(任意次)、“+”(至少一次)、“?”(零次或一次)等特殊字符。
例如查找“is”,可以使用最簡單的由普通字符組成的正則表達式“is”,匹配含有“is”的字符串,但是很多單詞如this、his、kiss等都包含“is”,因此若要精確匹配查找“is”,不能只用“is”正則查找,而是應該使用正則表達式“\bis\b”(“\b”是一個特殊字符,它用來匹配一個單詞的邊界,即匹配單詞的開頭或結尾)。
3 應用正則表達式驗證表單數據
在網站開發,尤其是動態網站開發方面,表單是客戶端向服務器提交數據的重要載體,扮演者非常重要的角色。如何驗證表單提交數據的合法性也成為一個大問題。為了驗證提交數據的合法性,開發人員可能需要寫很多的驗證函數,這給開發工作帶來很大的困擾,而應用正則表達式驗證提交數據則很大提高了代碼的可重用性,并提高了開發效率。
通常表單數據的驗證主要有兩方面:一方面是判斷用戶輸入的數據是否合法;另一方面是提示用戶的數據為什么是不合法的。在表單數據中,通常需要驗證的內容有字符串(如以字母開頭、規定長度等)、郵政編碼、電話號碼、電子郵件、手機號碼、身份證號碼等。
4 常用的表單驗證正則表達式
在網站開發時,復雜的表單驗證經常需要使用正則表達式,在實際應用中,表單中常用的幾類正則表達式如下。
(1)/^[a-zA-Z][\w -]{n,m}$/:驗證以字母開頭、包含字母、數字、下劃線、連接符- ,且長度在(n+1)-(m+1)之間的字符串。
(2)/^[\u4E00-\u9FA5]+$/:驗證輸入的數據只能為中文。
(3)/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/:驗證輸入的Email格式是否正確。
(4)/^\d{15}$|^\d{17}([0-9]|X)$/或者/^\d{15}$|^\d{17}([0-9]|X)$:驗證身份證號碼(身份證號碼為15位或者18位,15位時全為數字,18位時前17位為數字,最后一位是校驗位,可能為數字或字符X)。
(5)/^[1-9]\d{5}$/:驗證中國郵政編碼。
(6)/^[1-9][0-9]{4,}$/:用于驗證QQ號碼,QQ號碼最少是5位。
(7)/^1\d{10}$/:驗證大陸手機號碼。
5 結語
正則表達式是用來操作文本和數據的強大工具,它具有易用、靈活、功能強大的優點,而且還可以將那些原本復雜、繁瑣的文本處理過程變成可自動處理的工作。應用正則表達式處理復雜字符操作,不僅可以提高工作效率,而且也可以在一定程度上節省代碼量。
但是,對于初學者來說,正則表達式的語法比較晦澀難懂,原理比較復雜,不容易被學習和掌握。而且,如果正則表達式寫得不合理,很容易導致性能問題,所以只有清楚地理解正則引擎的執行方式,才能寫出好的正則表達式。
參考文獻
[1]Jeffrey E.F.Friedl著,余晟譯.精通正則表達式(第3版).電子工業出版社,2012.
[2]Micbael Fitzgerald.正則表達式入門.東南大學出版社,2013.
[3]Jan Goyvaerts Steven Levithan著 郭耀 遲騁譯.正則表達式經典實例(第2版).人民郵電出版社,2014.