php5 與 mysql5 入門學習指南

19
PHP5 與 MySQL5 與與與與與與 PHP5 與 MySQL5 與與與與 與與 與 20 與 與與與與與與與與 與與與與 與

Upload: kyran

Post on 19-Jan-2016

78 views

Category:

Documents


2 download

DESCRIPTION

PHP5 與 MySQL5 入門學習指南. 第 20 章 正規化語法與函數. 凱文瑞克 著. 本章大綱. 20-1 Meta 字元集 20-2 字串格式檢查 20-3 文字置換 20-4 字串分解 問題與討論. 20-1 Meta 字元集. 正規化 (regular expression) 語法,對於文字處理非常方便 , 例如搜尋 , 剖析文章,只要當我們想要對文字的內容進行檢查,看看是否符合需求時,就可以使用正規化語法 Meta 字元集是正規化過程中 , 定義格式的規範。. Meta 字元集. Meta 字元集實例. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

第 20 章 正規化語法與函數

凱文瑞克 著

Page 2: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

本章大綱20-1 Meta 字元集20-2 字串格式檢查20-3 文字置換20-4 字串分解問題與討論

Page 3: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

20-1 Meta 字元集正規化 (regular expression) 語法,對於文字處理非常方便 , 例如搜尋 , 剖析文章,只要當我們想要對文字的內容進行檢查,看看是否符合需求時,就可以使用正規化語法Meta 字元集是正規化過程中 , 定義格式的規範。

Page 4: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

Meta 字元集樣本字元 功 用 ^ 宣告物件的開始 ( 或者是多行模式時的一行 )$ 宣告物件的結束 ( 或者是多行模式時的一行 ). 符合任何字元,但是不包括 newline 和 \n 。 [ 開始字元類別的定義 ] 結束字元類別的定義| 替代的分支 ( 子群組樣本的開始) 子群組樣本的結束? 符合 0 個或多個 * 符合 0 個以上 + 符合 1 個以上 { 最少出現次數 / 最大出現次數的開始符號} 最少出現次數 / 最大出現次數的結束符號[^ ] 不包含 [ ] 中的字串[ - ] 指示字元的範圍

Page 5: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

Meta 字元集實例[abc] 符合 a,b,c 任一字元^[abc] 符合字串開頭一定要符合 a,b,c 任一字元 [abc]$ 符合字串結尾一定要符合 a,b,c 任一字元 [^abc] 不可符合 a,b,c 任一字元[a]{4} 一定要剛好 4 個 a[a]{4,} a 要有 4 個以上[a]{,4} 要有 0 個到 4 個 a[a]{1,4} 要有 1 個到 4 個 aab*c ac , abc , abbc , abbbc , abbbbc ... 皆符合 ( 符合 0 個以上 )ab+c abc, abbc , abbbc , abbbbc ... 皆符合 ( 符合 1 個以上 )[a-z] 符合小寫 a 到 z 的任一字母[A-Z] 符合大寫 A 到 Z 的任一字母[0-9] 符合 0 到 9 的任一數字[A-Z]+ 符合大寫 a 到 z 的字母要一個以上.* 代表符合任何字元 0 個以上([0-9]{1,2}) 將兩個樣本群組成一個樣本

Page 6: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

20-2 字串格式檢查PHP 提供 ereg() 函數可以檢查字串是否符合要求 , 其格式如下 : int ereg (string 樣本字串 , string 字串 [,array regs])

– 說明判斷 [ 字串 ] 的格式是否符合要求。搜尋一個字串是否符合 [ 樣本字串 ] 的格式。第三個選項設定後 , 字串片段會存入指定的陣列。 如果字串比對沒有錯誤則傳回 True 。

Page 7: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?php2: $date="2003-01-31";3: if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {4: echo "$regs[3] / $regs[2] / $regs[1] <br>";5: echo "$regs[0] <br>";6: echo "$regs[1] 年 $regs[2] 月 $regs[3] 日 ";7: } else {8: echo " 不合法的日期格式: $date";9: }10: ?>

1: <?php2: $date="2003-01-31";3: if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {4: echo "$regs[3] / $regs[2] / $regs[1] <br>";5: echo "$regs[0] <br>";6: echo "$regs[1] 年 $regs[2] 月 $regs[3] 日 ";7: } else {8: echo " 不合法的日期格式: $date";9: }10: ?>

第一個參數就是字串的格式 , 第二個參數 $date 就是被比對的字串 , 第三個參數 $regs 就是字串片段陣列 , 在這個範例中 $regs[0] 會儲存 $date 字串內容 , $regs[1] 會儲存日期 , $regs[2] 會儲存月份 , $regs[3] 會儲存年。

檢查日期格

Page 8: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?PHP2: $string="I am abc";3: if (ereg ("abc", $string)) echo "'abc' is True <p>"; 4: if (ereg ("^abc", $string)) echo "'^abc' is True <p>"; 5: if (ereg ("abc$", $string)) echo "'abc$' is True";6: ?>

1: <?PHP2: $string="I am abc";3: if (ereg ("abc", $string)) echo "'abc' is True <p>"; 4: if (ereg ("^abc", $string)) echo "'^abc' is True <p>"; 5: if (ereg ("abc$", $string)) echo "'abc$' is True";6: ?>

第 2 行設定測試字串。 第 3 行如果在 $string 中發現 "abc" 傳回 True 。 第 4行傳回 True, 如果在 $string 字串的開始發現 "abc" 。 第 5 行傳回 true, 如果在 $string 字串的結尾發現 "abc" 。

Page 9: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

ereg() 需要注意英文字母大小寫 , 如果需要不區分英文字母大小寫 , 則可以使用 eregi() 函數 , 其格式如下。

int eregi (string 樣本 , string 字串 [,array regs])

這個函數功能與 ereg() 相同 , 除了忽略大小寫。

Page 10: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

20-3 文字置換置換文字內容也是常使用功能。函數 ereg_replace() 會將符合格式的字串替換。其格式如下 : string ereg_replace (string 樣本字串 , string 替代文字 , string 字串 )

– 說明這個函數能夠掃描 [ 字串 ] 中符合 [ 樣本字串 ] 的部分 , 然後將符合的部分使用 [ 替代文字 ] 取代 , 再將修改過的字串傳回 ( 在這裡大小寫是當做不同的 ) 。如果沒有符合的部分 , 則會將原始的字串傳回。

Page 11: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?php2: $string = "This is a test. That is another test.";3: echo ereg_replace (" is", " was", $string)."<P>";4: echo ereg_replace (" is", "<B> is</B>", $string)."<P>";5: echo ereg_replace ("test", "<a href=http://www.flag.com.tw>test</a>", $string);6: ?>

1: <?php2: $string = "This is a test. That is another test.";3: echo ereg_replace (" is", " was", $string)."<P>";4: echo ereg_replace (" is", "<B> is</B>", $string)."<P>";5: echo ereg_replace ("test", "<a href=http://www.flag.com.tw>test</a>", $string);6: ?>

第 2 行設定測試用字串。 第 3 行將 is 置換成 was 。 第 4 行將 is 置換成粗體文字的 is 。 第 5 行將 test 加上超連結。

Page 12: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?php2: $string =" 測試用文字 ";3: echo "**********$string**********<p>";4: $string = ereg_replace ("^", "<BR>", $string);5: $string = ereg_replace ("$", "<BR>", $string);6: echo "==========$string==========";7: ?>

1: <?php2: $string =" 測試用文字 ";3: echo "**********$string**********<p>";4: $string = ereg_replace ("^", "<BR>", $string);5: $string = ereg_replace ("$", "<BR>", $string);6: echo "==========$string==========";7: ?>

第 2 行設定測試用字串。 第 3 行顯示置換前之內容。 第 4-5 行 $string 開始的位置放入一個 <BR> 標記會在 $string 結尾的位置放入一個 <BR> 標記 , 即字串前後加 <BR> 標籤。 第 6 行顯示置換結果。

Page 13: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

因為正規化是處理文字的函數 , 任何的輸入資料都會被轉換成文字型態。

1: <?PHP2: $num = 49;3: $string = "This string has four words. <BR>";4: $string = ereg_replace ('four', $num, $string);5: echo $string;6: $num = '49';7: $string = "This string has four words";8: $string = ereg_replace ('four', $num, $string);9: echo $string;10: ?>

1: <?PHP2: $num = 49;3: $string = "This string has four words. <BR>";4: $string = ereg_replace ('four', $num, $string);5: echo $string;6: $num = '49';7: $string = "This string has four words";8: $string = ereg_replace ('four', $num, $string);9: echo $string;10: ?>

第 2 行設定 $num 為整數 49 。 第 3 行設定測試字串。 第 4 行置換 four 變成 49 (integer) 。 第 5 行顯示置換後的結果。 第 6 行設定 $num 為文字 '49' 。 第 7 行設定測試字串。 第 8 行置換 four 變成 '49' 。 第 9 行顯示置換後的結果。

Page 14: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

20-4 字串分解PHP 提供 split() 函數。 此函數可依照格式分隔字串。 其格式如下 : array split (string 樣本字串 , string 字串 [, int limit])

– 說明函數將原始 [ 字串 ] 依據 [ 樣本字串 ] 當分隔 , 順序儲存在陣列中 , 假如有參數 limit 有設定 , 那麼 limit 為陣列的大小。假如有錯誤發生 , split() 傳回 false, split() 函數中大小寫字元是當做不同的字元。

Page 15: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?PHP2: $date = "04/30/1973";3: list ($month, $day, $year) = split ('[/.-]', $date);4: echo " 月 : $month; 日 :$day; 年 : $year<br>\n";5: ?>

1: <?PHP2: $date = "04/30/1973";3: list ($month, $day, $year) = split ('[/.-]', $date);4: echo " 月 : $month; 日 :$day; 年 : $year<br>\n";5: ?>

第 2 行設定測試日期。 第 3 行將 $date 利用 [/.-] 符號分隔成數個片段。 每個片段依序存在三個變數中。 第 4 行顯示結果。

Page 16: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

spliti() 函數函數格式如下 : array spliti (string 樣本字串 , string 字串 [, int limit])

– 說明 :功能和 split()完全相同 , 除了忽略大小寫。

Page 17: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

sql_regcase() 提供產生忽略大小寫的合法正規化字串的功能。其格式如下 :

string sql_regcase (string 字串 )

說明 傳回一個忽略大小寫的合法正規化字串 , 這函數可以將字串中的每一個字轉換成一個 [] 符號包括起來的敘述 , [] 中的內容是這個字元的大寫及小寫。

sql_regcase()

Page 18: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

1: <?PHP2: echo sql_regcase ("PHP is a good solution");3: ?>

1: <?PHP2: echo sql_regcase ("PHP is a good solution");3: ?>

將文字串 "PHP is a good solution" 正規化。

Page 19: PHP5 與 MySQL5 入門學習指南

PHP5 與 MySQL5 入門學習指南

問題與討論1. 何謂正規化 ?2. 請將範例 20-5以文字檔案方式讀入後 , 將 strin

g 加上底線後顯示出來。3. 請利用表單輸入一個電子郵件地址 , 並檢查此地址格式是否符合電子郵件地址格式。

4. 請利用表單輸入一串文字 , 將使用者輸入的文字串分解成單字。

5. 請將 "2020/10-30" 分解成 2020 年 10 月 30 日。