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