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