第十部分通用表示法学习资料

上传人:yuzo****123 文档编号:139110183 上传时间:2020-07-19 格式:PPT 页数:45 大小:441.50KB
返回 下载 相关 举报
第十部分通用表示法学习资料_第1页
第1页 / 共45页
第十部分通用表示法学习资料_第2页
第2页 / 共45页
第十部分通用表示法学习资料_第3页
第3页 / 共45页
第十部分通用表示法学习资料_第4页
第4页 / 共45页
第十部分通用表示法学习资料_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第十部分通用表示法学习资料》由会员分享,可在线阅读,更多相关《第十部分通用表示法学习资料(45页珍藏版)》请在金锄头文库上搜索。

1、第十章通用表示法,張智星 jangmirlab.org http:/mirlab.org/jang 台大資工系 多媒體檢索實驗室,本章大綱,大綱 本章介紹通用表示法,使用強大的字串比對方式,可以在進行 JavaScript 程式設計時,能夠有事半功倍的效果。 主題 10-1:資料驗證 10-2:資料修改 10-3:通用式相關列表 10-4:常用資料規則,2/45,10-1:資料驗證,本小節介紹通用表示法及其用法。,3/45,基本介紹,通用表示法或通用式(Regular expressions)是在 UNIX 中發展出的字串比對技巧。 Regular expressions 應該翻成正規表示法或

2、正規式,但是我們使用通用表示法或通用式似乎更能適切地表達其功能。 目標:用格式簡單、功能強大的符號來比對複雜的字串。 許多軟體或指令都支援通用表示法。 JavaScript 及 Vbscript:格式稍不同,但功能一樣 Unix 指令:如 grep、sed、awk、ed、vi、emacs 等。 MATLAB, Python, Perl, ,4/45,範例10-1(1),主題:簡易身分證字號驗證 連結:regExpID01.htm (remote host, local host) 程式碼重點 說明 re=/A-Zd9$/ 就是一個通用式。 以re.test()比對字串string,回傳true

3、代表比對正確,反之回傳false。,6/45,範例10-1(2),通用表示法解釋: /A-Zd9$/ 比對數個字元中的任一個字元,可用,並可用-來代表字母或是數字的範圍。 A-Z 代表由 A 至 Z 的任一個英文字母。( 亦可寫成ABCDEFGHIJKLMNOPQRSTUVWXYZ) a-zA-Z 代表不限大小寫的一個英文字母 d 代表0 至 9 的數字。 亦可寫成0-9或0123456789 9 代表前一個字元的重複次數。 d9 代表需要有九個數字 。 代表字串開始位置。 $ 代表字串結束位置。 若沒以上兩個符號,那麼只要任一個字串中間比對成功即可。,7/45,範例10-2,主題:簡易信用卡

4、卡號驗證 連結: regExpCreditCardNumber01.htm (remote host, local host) 程式碼重點 說明 也可寫成: re = /(d4-)3d4$/ 重複的部分多於一個字母,必須將需要重複的部分放入小括號內,再由大括號包夾重複的次數。,8/45,範例10-3,主題:簡易英文名字驗證 連結: regExpEnglishName01.htm (remote host, local host) 程式碼重點 說明 A-Za-z- :一個英文字母(可以大寫或小寫),或字元- -:已經有特殊意義,必須在-之前加上 +:重複前一個字元一次或多次 A-Za-z-+ :

5、英文字或-形成的字串,且長度至少為1 s :空白字元,可以是空格、定位鍵、換列字元,9/45,範例10-4,主題:簡易電子郵件格式驗證 連結: regExpEmail01.htm (remote host, local host) 程式碼重點 說明 .:比對任一個字元(不包含換列字元) .+:長度不為零的字串 .:.原先已具有特殊意義,必須加上反斜線 .2,3 :長度為 2到3個字元,10/45,範例10-5,主題:電子郵件格式驗證(可避開含有空白的電子郵件帳號) 連結: regExpEmail02.htm (remote host, local host) 說明 s :所有可能的空白字元,包

6、含空白、定位鍵、換列字元等(不包含全形的空白) :在中括弧內是代表否定 注意: 在一般通用表示法的意義是字串開始的位置,但放在中括弧內,則代表否定或非。 s+:一個或多個非空白字元所形成的字串,11/45,範例10-5 (2),主題:電子郵件格式驗證(可避開含有空白的電子郵件帳號) 若要對電郵進行更嚴苛的比對,上述通用式可以改成 其中 w 代表一個數字、字母或底線,全等於 a-zA-Z0-9_。(但這樣嚴苛的標準也可能錯誤地阻擋正常的電郵。),12/45,範例10-6,主題:通用式的完整測試頁(列出比對到字串) 連結:regExpTest01.htm (remote host, local h

7、ost) 程式碼重點 說明 使用了字串的 match() 方法,對通用式進行比對。 matched = str.match(regexp) 可將比對到的字串送到一個陣列,以便後續列出比對結果。,13/45,10-2:資料修改,本小節介紹如何使用通用表示法來進行字串字串的修改。,14/45,通用表示法的字串方法,用途 強化搜尋比對 立即修改(修特別是改表單資料) 方法,15/45,範例10-7,主題:搜尋並列出位置(判斷第一個符合的位置) 連結:regExpSearch01.htm (remote host, local host) 程式碼重點 說明 str.search(re) 將會傳回符合

8、re 的第一個位置。(若沒找到則回傳-1) str.search(re) 只能用來搜尋某個通用式在一個字串的第一次出現的位置。,16/45,範例10-8,主題:搜尋並列出位置(取出符合的所有子字串) 連結:regExpMatch01.htm (remote host, local host) 程式碼重點 說明 使用string.match(regexp)可回傳符合的所有子字串。 傳回的 matched 變數是一個陣列,包含所比對到的字串。,17/45,範例10-9,主題:搜尋並代換 連結:regExpReplace01.htm (remote host, local host) 程式碼重點 說

9、明 使用str.replace將符合通用式的第一部分替換成新字串。 欲將所有符合的替換成新字串,只要將選項改成g。,18/45,範例10-10,主題:修正中文姓名(去除表單前後空白) 連結: regExpReplace02.htm (remote host, local host) 程式碼重點 說明 s :英文空白字元或大五碼的全形空白。 replace(/s+/g, ) :將 (/s+/g 此類字串全部代換為空字串。,19/45,範例10-11,主題:修改英文姓名(消除前後空白並合併中間空白) 連結: regExpReplace03.htm (remote host, local host)

10、 程式碼重點 說明 |可以代表或。 刪除頭尾字串兩式可合併: str = str.replace(/s+|s+$/g, );,20/45,通用式的比對原則,貪心比對(Greedy Match) 遇到重複字元時,貪到越多的字元越好。 最小比對(Minimum Match) 必須在重複字元後面加上一個問號,代表在可能比對成功的情況下,比對越少越好。,21/45,範例10-12,主題:通用式的貪心比對與最小比對 連結: regExpGreedy01.htm (remote host, local host) 程式碼重點 說明 第一個通用式是採取預設的貪心比對,因此比對到的字串會是在比對成功的情況下最

11、長的字串。 第二個通用式中,加了一個問號,採取最小比對,因此比對到的字串是在比對成功的情況下最短的字串。,22/45,範例10-13,主題:越左越貪比對方式 連結: regExpGreedy02.htm (remote host, local host) 程式碼重點 說明 通用式中加括號,代表符合比對條件者,將被設定至 RegExp.$1(簡寫成$1)、RegExp.$2 (簡寫成$2)等變數中。 使用貪心比對時,會採用越左越貪,若要推翻此原則,可適時使用問號,以採用最小比對。 第一個通用式採取預設的貪心比對,第二個通用式適時加入問號,因此結果不同。,23/45,範例10-14,主題:對調兩個

12、英文字(replace的運用) 連結: regExpReplace04.htm (remote host, local host) 程式碼重點 說明 /(w+)s+(w+)/:判斷兩單字位置。 replace(regexp, $2 $1):對調兩單字位置。,24/45,範例10-15,主題:表單資料的修正與驗證 連結: regExpReplace05.htm (remote host, local host) 說明 利用 replace() 在 onBlur 事件時,先修正文字欄位,再進行驗證。 onBlur 事件後,JavaScript 會以通用式對表單元素的值進行修正與驗證。,25/45,

13、10-3:通用式相關列表,本小節列出常用的方法與通用式字元介紹。,26/45,通用式方法列表,27/45,通用式的應用(1),28/45,通用式的應用(2),說明: /代表一個字串的開始位置,同理/$/代表一個字串的結束位置,但如果 就代表否定。 在字元前加上 ,可避掉特殊字元的特殊意義。,29/45,通用式的特定字元,說明 RegExp(pattern, flag) 的方式建立通用式物件時,若 pattern 包含以反斜線開頭的特殊字元(例如 d、w、s 等)時,必須加上一個反斜線。 例:re = new RegExp(d+sw+, g);,30/45,定義字元的重複次數,31/45,通用式

14、總列表(1),32/45,通用式總列表(2),33/45,通用式總列表(3),34/45,通用式總列表(4),35/45,通用式總列表(5),36/45,10-4:常用資料規則,本小節介紹日常生活中常用的資料規則。,37/45,身分證字號的檢查碼(1),基本認知 共有10位 第一位為英文字母 第二個數字男生為 1,女生為 2 最後一位為檢查碼,經過之前一個字母與 8 個數字的組合計算後得出。,38/45,身分證字號的檢查碼(2),計算方法 英文代號轉換成數字(代表出生時的戶籍所在地) 英文轉成的數字,個位數乘再加上十位數 各數字從右到左依次乘、 求出(2)、(3)之和 求出(4)除10後之餘數

15、,用10減該餘數,結果就是檢查碼,若餘數為0,檢查碼就是 0。,39/45,身分證字號的檢查碼(3),英文代號以下表轉換成數字(代表出生時的戶籍所在地): 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=31 陽明山 H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣 I=34 嘉

16、義市 R=25 台南縣,40/45,身分證字號的檢查碼(4),範例 例如: 身分證號碼是 3 +18 +8 + 0 + 0 + 10 +12 +6 +14 + 5 =76 76/10=7.6 (餘數) 10-6=4 (檢查碼),41/45,信用卡卡片編碼(1),不同卡別編碼規則 信用卡號的最後一個數字就是信用卡的檢查碼。,42/45,信用卡卡片編碼(2),計算方法 將信用卡的每個數字設定權重:從右向左,檢查碼除外,每個數字的權重分別是 2、1、2、1、2、1 .。(若信用卡共有16碼,那麼最左邊數字的權重是 2;若信用卡卡號共有15碼,那麼最左邊數字的權重就是 1。) 將每個數字乘上權重,所得的加權數字若大於 9,那麼就從這加權數字裡扣除 9。 將所有處理過的加權數字全部加總起來,並且除以 10,取其餘數。 若餘數是 0,檢查碼就是 0,否則檢查碼就等於 10 減掉此餘數所得的值。,43/45,信用卡卡片編碼(3),範例1 若某張 Visa 信用卡卡號是

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号