林海菁
【摘要】在Web程序中,常常需要使用JavaScript腳本進(jìn)行用戶輸入校驗(yàn),避免非法數(shù)據(jù)傳遞到服務(wù)端。正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,用事先定義好的一些特定字符及其組合,組成一個(gè)“規(guī)則字符串”,用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。采用正則表達(dá)式可以輕松地解決Web程序客戶端用戶輸入校驗(yàn)的問(wèn)題。
【關(guān)鍵詞】正則表達(dá)式;JavaScript腳本;用戶輸入校驗(yàn)
一、引言
在Web程序中,為了實(shí)現(xiàn)網(wǎng)頁(yè)上的動(dòng)態(tài)功能,需要使用腳本語(yǔ)言進(jìn)行編程處理。通過(guò)腳本,可以動(dòng)態(tài)控制網(wǎng)頁(yè)的外觀和內(nèi)容,可以控制瀏覽器的行為,可以實(shí)現(xiàn)用戶交互操作,可以讀寫(xiě)部分客戶端信息,等等。其中驗(yàn)證用戶輸入表單的信息這一功能在大大小小的Web程序中普遍存在,是所有Web程序開(kāi)發(fā)者都要解決的問(wèn)題。本文介紹了如何利用正則表達(dá)式完美實(shí)現(xiàn)客戶端的用戶輸入校驗(yàn)。由于客戶端腳本語(yǔ)言種類比較多,本文就以比較流行的JavaScript為例進(jìn)行說(shuō)明。
二、創(chuàng)建正則表達(dá)式
正則表達(dá)式,又稱正規(guī)表示法、常規(guī)表示法,是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。正則表達(dá)式具有極強(qiáng)的靈活性、邏輯性和功能性,可以迅速地用極簡(jiǎn)單的方式達(dá)到字符串的復(fù)雜控制,但是對(duì)于剛接觸的人來(lái)說(shuō),它又顯得非?;逎y懂。
在JavaScript中,正則表達(dá)式由RegExp對(duì)象表示。可以使用RegExp( )構(gòu)造函數(shù)創(chuàng)建RegExp對(duì)象,其語(yǔ)法格式如下所示:
var 對(duì)象變量名=new RegExp(“正則表達(dá)式模式字符串”)
JavaScript還提供正則表達(dá)式直接量這種語(yǔ)法從而更方便地創(chuàng)建JavaScript正則表達(dá)式,它用包含在一對(duì)斜杠(/)之間的字符來(lái)表示正則表達(dá)式,這是比較常見(jiàn)的創(chuàng)建正則表達(dá)式的方法,其語(yǔ)法格式如下所示:
var 對(duì)象變量名=/正則表達(dá)式模式字符串/
無(wú)論采取哪種形式,創(chuàng)建一個(gè)RegExp對(duì)象都是比較容易的。比較晦澀難懂的地方在于正則表達(dá)式的語(yǔ)法,即如何描述字符的模式。
三、正則表達(dá)式語(yǔ)法
一個(gè)正則表達(dá)式是由普通字符(如數(shù)字、字母)以及特殊字符(稱為元字符)組成的字符模式。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與給定的字符串進(jìn)行匹配。
正則表達(dá)式中使用的元字符比較多,限于篇幅,本文只給出一些常用的操作符進(jìn)行說(shuō)明,其它未作說(shuō)明的可以觸類旁通。
四、運(yùn)用正則表達(dá)式的方法
在JavaScript腳本中,運(yùn)用正則表達(dá)式檢查字符串信息是否匹配有以下兩種方法:
1、調(diào)用正則表達(dá)式對(duì)象的常用方法
(1)exec(string)方法:該方法對(duì)string進(jìn)行匹配檢查,并返回匹配結(jié)果。符合將返回結(jié)果“true”,否則返回結(jié)果“false”。
(2)test(string)方法:該方法用于測(cè)試string是否含有匹配結(jié)果,如果包含將返回結(jié)果“true”,否則返回結(jié)果“false”。
2、調(diào)用內(nèi)置對(duì)象String的正則表達(dá)式方法
(1)match(pattern)方法:該方法根據(jù)正則表達(dá)式字符模式pattern對(duì)String對(duì)象的字符串進(jìn)行正則匹配,如果匹配到,返回匹配結(jié)果,如果匹配不到則返回null。
(2)search(pattern)方法:該方法根據(jù)pattern對(duì)字符串進(jìn)行正則匹配,如果匹配到一個(gè)結(jié)果,則返回它的索引數(shù),否則返回-1。
(3)replace(pattern, replacement)方法:該方法根據(jù)pattern對(duì)字符串進(jìn)行正則匹配,將匹配結(jié)果替換為replacement。
(4)split(pattern)方法:該方法根據(jù)pattern對(duì)字符串進(jìn)行正則分割,返回一個(gè)分割的數(shù)組。
五、常用正則表達(dá)式
很多通用的用戶輸入信息在多數(shù)Web程序中都會(huì)出現(xiàn),如身份證號(hào)、郵箱地址、電話號(hào)碼等,開(kāi)發(fā)者可以將這些信息的檢查定義成常用的函數(shù),寫(xiě)在一個(gè)js文檔中,供各Web程序隨時(shí)調(diào)用。以下列舉出一些較復(fù)雜的但常用的正則表達(dá)式供參考:
1、檢查身份證號(hào)
function checkIdCard (s) {
//身份證正則表達(dá)式(15位)
var rs1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份證正則表達(dá)式(18位)
Var rs2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
return rs1.test(s) || rs2.test(s);
}
2、檢查字符串中是否含有中文
function hasChinese (s) {
var rs=/[\u4E00-\u9FA5]/g;
return rs.test(s);
}
【參考文獻(xiàn)】
[1]Nicholas C.Zakas.JavaScript高級(jí)程序設(shè)計(jì)[M].人民郵電出版社,2012.
[2]David Flanagan.JavaScript權(quán)威指南[M].清華大學(xué)出版社,2007.