下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第十章
通用表示法張智星jang@/jang臺大資工系多媒體檢索實(shí)驗(yàn)室本章大綱大綱本章介紹通用表示法,使用強(qiáng)大的字串比對方式,可以在進(jìn)行JavaScript程式設(shè)計時,能夠有事半功倍的效果。主題10-1:資料驗(yàn)證10-2:資料修改10-3:通用式相關(guān)列表10-4:常用資料規(guī)則2/4510-1:資料驗(yàn)證本小節(jié)介紹通用表示法及其用法。3/45基本介紹「通用表示法」或「通用式」(Regularexpressions)是在UNIX中發(fā)展出的字串比對技巧。Regularexpressions應(yīng)該翻成「正規(guī)表示法」或「正規(guī)式」,但是我們使用「通用表示法」或「通用式」似乎更能適切地表達(dá)其功能。目標(biāo):用格式簡單、功能強(qiáng)大的符號來比對複雜的字串。許多軟體或指令都支援通用表示法。JavaScript及Vbscript:格式稍不同,但功能一樣Unix指令:如grep、sed、awk、ed、vi、emacs等。MATLAB,Python,Perl,…4/45JavaScript的通用式通用式是一個內(nèi)建的物件建構(gòu)函數(shù)(Constructionfunctoin)為RegExp。用法說明pattern是通用表示法的字串。flag是比對的方式:g:全域比對(Globalmatch)i:忽略大小寫(Ignorecase)gi:全域比對並忽略大小寫re=newRegExp("pattern","flag")re=/pattern/flag
//上面的簡寫格式5/45範(fàn)例10-1(1)主題:簡易身分證字號驗(yàn)證連結(jié):regExpID01.htm(remotehost,localhost)程式碼重點(diǎn)說明re=/^[A-Z]\d{9}$/就是一個通用式。以re.test()比對字串string,回傳true代表比對正確,反之回傳false。functioncheckID(string){
re=/^[A-Z]\d{9}$/;
if(re.test(string))alert("成功!符合「"+re+"」的格式!");
elsealert("失敗!不符合「"+re+"」的格式!");}6/45範(fàn)例10-1(2)通用表示法解釋:/^[A-Z]\d{9}$/比對數(shù)個字元中的任一個字元,可用「[]」,並可用「-」來代表字母或是數(shù)字的範(fàn)圍。[A-Z]代表由A至Z的任一個英文字母。(亦可寫成[ABCDEFGHIJKLMNOPQRSTUVWXYZ])[a-zA-Z]代表不限大小寫的一個英文字母\d代表0至9的數(shù)字。亦可寫成[0-9]或[0123456789]
{9}
代表前一個字元的重複次數(shù)。\d{9}代表需要有九個數(shù)字。^
代表字串開始位置。$代表字串結(jié)束位置。若沒以上兩個符號,那麼只要任一個字串中間比對成功即可。7/45範(fàn)例10-2主題:簡易信用卡卡號驗(yàn)證連結(jié):regExpCreditCardNumber01.htm(remotehost,localhost)程式碼重點(diǎn)說明也可寫成:re=/^(\d{4}-){3}\d{4}$/重複的部分多於一個字母,必須將需要重複的部分放入小括號內(nèi),再由大括號包夾重複的次數(shù)。re=/^\d{4}-\d{4}-\d{4}-\d{4}$/8/45範(fàn)例10-3主題:簡易英文名字驗(yàn)證連結(jié):regExpEnglishName01.htm(remotehost,localhost)程式碼重點(diǎn)說明[A-Za-z\-]
:一個英文字母(可以大寫或小寫),或字元「-」「-」:已經(jīng)有特殊意義,必須在「-」之前加上「\」「+」:重複前一個字元一次或多次
[A-Za-z\-]+:英文字或「-」形成的字串,且長度至少為1\s
:空白字元,可以是空格、定位鍵、換列字元re1=/^[A-Za-z\-]+\s+[A-Za-z\-]+$/;re2=/^[A-Za-z\-]+\s+[A-Za-z\-]+\s+[A-Za-z\-]+$/;9/45範(fàn)例10-4主題:簡易電子郵件格式驗(yàn)證連結(jié):regExpEmail01.htm(remotehost,localhost)程式碼重點(diǎn)說明「.」:比對任一個字元(不包含換列字元)「.+」:長度不為零的字串「\.」:「.」原先已具有特殊意義,必須加上反斜線.{2,3}:長度為2到3個字元re=/^.+@.+\..{2,3}$/;10/45範(fàn)例10-5主題:電子郵件格式驗(yàn)證(可避開含有空白的電子郵件帳號)連結(jié):regExpEmail02.htm(remotehost,localhost)說明\s:所有可能的空白字元,包含空白、定位鍵、換列字元等(不包含全形的空白)[^]
:在中括弧內(nèi)是代表「否定」注意:^
在一般通用表示法的意義是「字串開始的位置」,但放在中括弧內(nèi),則代表「否定」或「非」。[^\s]+:一個或多個非空白字元所形成的字串re=/^[^\s]+@[^\s]+\.[^\s]{2,3}$/;11/45範(fàn)例10-5(2)主題:電子郵件格式驗(yàn)證(可避開含有空白的電子郵件帳號)若要對電郵進(jìn)行更嚴(yán)苛的比對,上述通用式可以改成其中\(zhòng)w代表一個數(shù)字、字母或底線,全等於[a-zA-Z0-9_]。(但這樣嚴(yán)苛的標(biāo)準(zhǔn)也可能錯誤地阻擋正常的電郵。)re=/^\w+@\w+\.\w{2,3}$/;12/45範(fàn)例10-6主題:通用式的完整測試頁(列出比對到字串)連結(jié):regExpTest01.htm(remotehost,localhost)程式碼重點(diǎn)說明使用了字串的match()方法,對通用式進(jìn)行比對。matched=str.match(regexp)可將比對到的字串送到一個陣列,以便後續(xù)列出比對結(jié)果。varmatched=str.match(regexp);for(vari=0;i<matched.length;i++)
dispstr=dispstr+"\n"+matched[i];13/4510-2:資料修改本小節(jié)介紹如何使用通用表示法來進(jìn)行字串字串的修改。14/45通用表示法的字串方法用途強(qiáng)化搜尋比對立即修改(修特別是改表單資料)方法字串方法功能string.search(re)通用式re在某個字串string出現(xiàn)的位置string.match(re)從字串string抽取符合通用式re的子字串,並以字串陣列傳回string.replace(re,newStr)將字串string符合通用式re的部分,代換為newStr15/45範(fàn)例10-7主題:搜尋並列出位置(判斷第一個符合的位置)連結(jié):regExpSearch01.htm(remotehost,localhost)程式碼重點(diǎn)說明str.search(re)將會傳回符合re的第一個位置。(若沒找到則回傳-1)str.search(re)只能用來搜尋某個通用式在一個字串的第一次出現(xiàn)的位置。functionregExpMatch(string,pattern,flag){
varregexp=newRegExp(pattern,flag);
varindex=string.search(regexp);
alert(index);}16/45範(fàn)例10-8主題:搜尋並列出位置(取出符合的所有子字串)連結(jié):regExpMatch01.htm(remotehost,localhost)程式碼重點(diǎn)說明使用string.match(regexp)可回傳符合的所有子字串。傳回的matched變數(shù)是一個陣列,包含所比對到的字串。functionregExpMatch(string,pattern,flag){
varregexp=newRegExp(pattern,flag);
varmatched=string.match(regexp);
alert(matched);}17/45範(fàn)例10-9主題:搜尋並代換連結(jié):regExpReplace01.htm(remotehost,localhost)程式碼重點(diǎn)說明使用str.replace將符合通用式的第一部分替換成新字串。欲將所有符合的替換成新字串,只要將選項(xiàng)改成「g」。functionregExpReplace(strId,pat1id,pat2id,flagId){varregexp=newRegExp(pat1id.value,flagId.value);varstr=strId.value;varnewString=str.replace(regexp,pat2id.value);alert(newString);}18/45範(fàn)例10-10主題:修正中文姓名(去除表單前後空白)連結(jié):
regExpReplace02.htm(remotehost,localhost)程式碼重點(diǎn)說明[\s
]
:英文空白字元或大五碼的全形空白。replace(/[\s
]+/g,""):將「
(/[\s
]+/g」此類字串全部代換為空字串。functioncheckChineseName(uiControl){
uiControl.value=uiControl.value.replace(/[\s
]+/g,"");}19/45範(fàn)例10-11主題:修改英文姓名(消除前後空白並合併中間空白)連結(jié):
regExpReplace03.htm(remotehost,localhost)程式碼重點(diǎn)說明「|」可以代表「或」。刪除頭尾字串兩式可合併:str=str.replace(/^[\s
]+|[\s
]+$/g,"");str=str.replace(/^[\s
]+/g,"");//刪除頭部的空白字串str=str.replace(/[\s
]+$/g,"");//刪除尾部的空白字串str=str.replace(/[\s
]+/g,"");//將空白字串換成一半形空格20/45通用式的比對原則貪心比對(GreedyMatch)遇到重複字元時,「貪」到越多的字元越好。最小比對(MinimumMatch)必須在重複字元後面加上一個問號,代表「在可能比對成功的情況下,比對越少越好」。21/45範(fàn)例10-12主題:通用式的「貪心比對」與「最小比對」連結(jié):
regExpGreedy01.htm(remotehost,localhost)程式碼重點(diǎn)說明第一個通用式是採取預(yù)設(shè)的「貪心比對」,因此比對到的字串會是在比對成功的情況下最長的字串。第二個通用式中,加了一個問號,採取「最小比對」,因此比對到的字串是在比對成功的情況下最短的字串。re=/b.*t/;re=/b.*?t/;22/45範(fàn)例10-13主題:「越左越貪」比對方式連結(jié):
regExpGreedy02.htm(remotehost,localhost)程式碼重點(diǎn)說明通用式中加括號,代表符合比對條件者,將被設(shè)定至RegExp.$1(簡寫成$1)、RegExp.$2(簡寫成$2)等變數(shù)中。使用「貪心比對」時,會採用「越左越貪」,若要推翻此原則,可適時使用問號,以採用「最小比對」。第一個通用式採取預(yù)設(shè)的貪心比對,第二個通用式適時加入問號,因此結(jié)果不同。re=/a(.*)b(.*)d/;re=/a(.*?)b(.*)d/;23/45範(fàn)例10-14主題:對調(diào)兩個英文字(replace的運(yùn)用)連結(jié):
regExpReplace04.htm(remotehost,localhost)程式碼重點(diǎn)說明/(\w+)\s+(\w+)/:判斷兩單字位置。replace(regexp,"$2$1"):對調(diào)兩單字位置。varregexp=/(\w+)\s+(\w+)/;varnewString=id.innerHTML.replace(regexp,"$2$1");24/45範(fàn)例10-15主題:表單資料的修正與驗(yàn)證連結(jié):
regExpReplace05.htm(remotehost,localhost)說明利用replace()在onBlur事件時,先修正文字欄位,再進(jìn)行驗(yàn)證。onBlur事件後,JavaScript會以通用式對表單元素的值進(jìn)行修正與驗(yàn)證。25/4510-3:通用式相關(guān)列表本小節(jié)列出常用的方法與通用式字元介紹。26/45通用式方法列表通用式相關(guān)的方法功能re.exec(string)從字串string抽取符合通用式re的子字串,並以字串陣列傳回re.test(string)以字串string比對通用式re,並傳回比對結(jié)果(true代表比對成功,false代表比對失?。﹕tring.search(re)通用式re在某個字串string出現(xiàn)的位置string.match(re)從字串string抽取符合通用式re的子字串,並以字串陣列傳回,此功能和re.exec(string)相同string.replace(re,newStr)將字串string符合通用式re的部分,代換為newStr27/45通用式的應(yīng)用(1)通用式說明及範(fàn)例比對不成立之字串/a/含字母"a"的字串,例如"ab","bac","cba""xyz"/a./含字母"a"以及其後任一個字元的字串,例如"ab","bac"(若要比對.,請使用\.)"a","ba"/^xy/以"xy"開始的字串,例如"xyz","xyab"(若要比對^,請使用\^)"axy","bxy"/xy$/以"xy"結(jié)尾的字串,例如"axy","abxy"(若要比對$,請使用\$)"xya","xyb"/[13579]/包含"1"或"3"或"5"或"7"或"9"的字串,例如:"a3b","1xy""y2k"/[0-9]/含數(shù)字之字串不含數(shù)字之字串/[a-z0-9]/含數(shù)字或小寫字母之字串不含數(shù)字及小寫字母之字串28/45通用式的應(yīng)用(2)說明:「/^/」代表一個字串的開始位置,同理「/$/」代表一個字串的結(jié)束位置,但如果「[^]」
就代表「否定」。在字元前加上「\」,可避掉特殊字元的特殊意義。通用式說明及範(fàn)例比對不成立之字串/[a-zA-Z0-9]/含數(shù)字或字母之字串不含數(shù)字及字母之字串/b[aeiou]t/"bat","bet","bit","bot","but""bxt","bzt"/[^0-9]/含非數(shù)字之字串,例如"25f6"(若要比對^,請使用\^)只含數(shù)字之字串/[^aeiouAEIOU]/含非母音之字串,例如“abeu"(若要比對^,請使用\^)只含母音之字串/[^\^]/含非"^"之字串,例如"xyz",“^b^""^^^^"29/45通用式的特定字元說明RegExp(pattern,flag)的方式建立通用式物件時,若pattern包含以反斜線開頭的特殊字元(例如\d、\w、\s等)時,必須加上一個反斜線。例:re=newRegExp("\\d+\\s\\w+","g");通用表示法的特定字元說明等效的通用表示法\d數(shù)字[0-9]\D非數(shù)字[^0-9]\w數(shù)字、字母、底線[a-zA-Z0-9_]\W非\w[^a-zA-Z0-9_]\s空白字元[\r\t\n\f]\S非空白字元[^\r\t\n\f]30/45定義字元的重複次數(shù)通用表示法說明/a?/零或一個a(若要比對?字元,請使用\?)/a+/一或多個a(若要比對+字元,請使用\+)/a*/零或多個a(若要比對*字元,請使用\*)/a{4}/四個a/a{5,10}/五至十個a/a{5,}/至少五個a/a{,3}/至多三個a/a.{5}b/a和b中間夾五個(非換行)字元31/45通用式總列表(1)字元說明簡單範(fàn)例\避開特殊字元/A\*/可用於比對"A*",其中*是一個特殊字元,為避開其特殊意義,所以必須加上"\"^比對輸入列的起始位置/^A/可比對"Abcd"中的"A",但不可比對"aAb"$比對輸入列的結(jié)束位置/A$/可比對"bcdA"中的"A",但不可比對"aAb"*比對前一個字元零次或更多次/bo*/可比對"Goodboook"中的"booo",亦可比對"Goodbk"中的"b"+比對前一個字元一次或更多次,等效於{1,}/a+/可比對"caaandy"中的"aaa",但不可比對"cndy"?比對前一個字元零次或一次/e?l/可比對"angel"中的"el",也可以比對"angle"中的"l".比對任何一個字元(但換行符號不算)/.n/可比對"nay,anappleisonthetree"中的"an"和"on",但不可比對"nay"32/45通用式總列表(2)字元說明簡單範(fàn)例(x)比對x並將符合的部分存入一個變數(shù)/(a*)and(b*)/可比對"aaaandbb"中的"aaa"和"bb",並將這兩個比對得到的字串設(shè)定至變數(shù)RegExp.$1和RegExp.$2。x|y比對x或y/a+|b+/g比對"aaakbb"中"aaa"和"bb"{n}比對前一個字元n次,n為一個正整數(shù)/a{3}/可比對"lllaaalaa"其中的"aaa",但不可比對"aa"{n,}比對前一個字元至少n次,n為一個正整數(shù)/a{3,}/可比對"aaaaaaaaa"其中的"aaa"及"aaaa",但不可比對"aa"{n,m}比對前一個字元至少n次,至多m次,m、n均為正整數(shù)/a{3,4}/可比對"aaaaaaaaaaaaaa"其中的"aaa"及"aaaa",但不可比對"aa"及"aaaaa"[xyz]比對中括弧內(nèi)任一字元/[ecm]/比對"welcome"中"e"或"c"或"m"[^xyz]比對不在中括弧內(nèi)出現(xiàn)的任一個字元/[^ecm]/可比對"welcome"中的"w"、"l"、"o",可見出其與[xyz]功能相反。(同時請同學(xué)也注意/^/與[^]之間功能的不同。)33/45通用式總列表(3)字元說明簡單範(fàn)例[\b]比對退位字元(Backspacecharacter)可以比對一個backspace,也請注意[\b]與\b之間的差別\b比對英文字的邊界,例如空格/\bn\w/可以比對"noonday"中'no';
/\wy\b/可比對"possiblyyesterday."中'ly'\B比對非「英文字的邊界」/\w\Bn/可以比對"noonday"中'on',
另外/y\B\w/可以比對"possiblyyesterday."中的'ye'\cX比對控制字元,X是控制字元/\cM/可比對一個字串中的control-M\d比對任一個數(shù)字,等效於[0-9]/[\d]/可比對由"0"至"9"的任一數(shù)字但其餘如字母等就不可比對\D比對任一個非數(shù)字,等於[^0-9]/[\D]/可比對"w""a"...但不可比對如"7""1"等數(shù)字\f比對form-feed若是在文字中有發(fā)生"換頁"的行為則可以比對成功34/45通用式總列表(4)字元說明簡單範(fàn)例\n比對換行符號若是在文字中有發(fā)生"換行"的行為則可以比對成功\r比對carriagereturn
\s比對任一個空白字元(Whitespacecharacter),等效於[\f\n\r\t\v]/\s\w*/可比對"Ab"中的"b"\S比對任一個非空白字元,等效於[^\f\n\r\t\v]/\S\w*/可比對"Ab"中的"A"\t比對定位字元(Tab)
\v比對垂直定位字元(Verticaltab)
\w比對數(shù)字字母字元(Alphanumericalcharacters)或底線字母("_"),等效於[A-Za-z0-9_]/\w/可比對".A_!9"中的"A"、"_"、"9"。35/45通用式總列表(5)字元說明簡單範(fàn)例\W比對非「數(shù)字字母字元或底線字母」,等效於[^A-Za-z0-9_]/\W/可比對".A_!9"中的"."、""、"!",可見其功能與/\w/恰好相反。\ooctal
比對八進(jìn)位,其中octal是八進(jìn)位數(shù)目/\o123/可比對與八進(jìn)位的ASCII中"123"所相對應(yīng)的字元值。\xhex
比對十六進(jìn)位,其中hex是十六進(jìn)位數(shù)目/\x38/可比對與16進(jìn)位的ASCII中"38"所相對應(yīng)的字元。36/4510-4:常用資料規(guī)則本小節(jié)介紹日常生活中常用的資料規(guī)則。37/45身分證字號的檢查碼(1)基本認(rèn)知共有10位第一位為英文字母第二個數(shù)字男生為1,女生為2最後一位為檢查碼,經(jīng)過之前一個字母與8個數(shù)字的組合計算後得出。38/45身分證字號的檢查碼(2)計算方法英文代號轉(zhuǎn)換成數(shù)字(代表出生時的戶籍所在地)英文轉(zhuǎn)成的數(shù)字,個位數(shù)乘9再加上十位數(shù)各數(shù)字從右到左依次乘1、2、3、4...8求出(2)、(3)之和求出(4)除10後之餘數(shù),用10減該餘數(shù),結(jié)果就是檢查碼,若餘數(shù)為0,檢查碼就是0。39/45身分證字號的檢查碼(3)英文代號以下表轉(zhuǎn)換成數(shù)字(代表出生時的戶籍所在地):A=10臺北市J=18新竹縣S=26高雄縣B=11臺中市K=19苗栗縣T=27屏東縣C=12基隆市L=20臺中縣U=28花蓮縣D=13臺南市M=21南投縣V=29臺東縣E=14高雄市N=22彰化縣W=32金門縣F=15臺北縣O=35新竹市X=30澎湖縣G=16宜蘭縣P=23雲(yún)林縣Y=31陽明山H=17桃園縣Q=24嘉義縣Z=33連江縣I=34嘉義市R=25臺南縣40/45身分證字號的檢查碼(4)範(fàn)例例如:身分證號碼是W100232754W1002327532XXXXXXXXXX1987654321───────────────────
3
+18+8
+0+0+
10+12+6+14+
5=76
76/1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)濟(jì)昆蟲養(yǎng)殖員創(chuàng)新應(yīng)用測試考核試卷含答案
- 輕鋼龍骨制作工安全應(yīng)急測試考核試卷含答案
- 噴涂噴焊工操作評估水平考核試卷含答案
- 制冷工復(fù)試能力考核試卷含答案
- 上饒市市級機(jī)關(guān)選調(diào)真題2025
- 幼兒園月度活動計劃范文
- 《卜算子》詩文理解與默寫指導(dǎo)
- 食品質(zhì)量安全檢測工作手冊
- 大數(shù)據(jù)背景下企業(yè)信息安全管理
- 高校學(xué)生心理咨詢工作流程規(guī)范
- 5S培訓(xùn)教材看圖學(xué)5S資料
- 酸銅鍍層晶體生長機(jī)制探討
- 顯示設(shè)備安裝與調(diào)試方案
- 2025年8月30日四川省事業(yè)單位選調(diào)面試真題及答案解析
- 掘進(jìn)工安全操作規(guī)程
- 2025上海復(fù)旦大學(xué)人事處招聘辦公室行政管理助理崗位1名考試參考試題及答案解析
- 油氣井帶壓作業(yè)安全操作流程手冊
- 認(rèn)知障礙老人的護(hù)理課件
- 麻醉科業(yè)務(wù)學(xué)習(xí)課件
- 綠色低碳微晶材料制造暨煤矸石工業(yè)固廢循環(huán)利用示范產(chǎn)業(yè)園環(huán)境影響報告表
- 業(yè)主裝修物業(yè)免責(zé)協(xié)議書
評論
0/150
提交評論