PHP5 與 MySQL5 入門學習指南
description
Transcript of PHP5 與 MySQL5 入門學習指南
PHP5 與 MySQL5 入門學習指南
PHP5 與 MySQL5 入門學習指南
第 20 章 正規化語法與函數
凱文瑞克 著
PHP5 與 MySQL5 入門學習指南
本章大綱20-1 Meta 字元集20-2 字串格式檢查20-3 文字置換20-4 字串分解問題與討論
PHP5 與 MySQL5 入門學習指南
20-1 Meta 字元集正規化 (regular expression) 語法,對於文字處理非常方便 , 例如搜尋 , 剖析文章,只要當我們想要對文字的內容進行檢查,看看是否符合需求時,就可以使用正規化語法Meta 字元集是正規化過程中 , 定義格式的規範。
PHP5 與 MySQL5 入門學習指南
Meta 字元集樣本字元 功 用 ^ 宣告物件的開始 ( 或者是多行模式時的一行 )$ 宣告物件的結束 ( 或者是多行模式時的一行 ). 符合任何字元,但是不包括 newline 和 \n 。 [ 開始字元類別的定義 ] 結束字元類別的定義| 替代的分支 ( 子群組樣本的開始) 子群組樣本的結束? 符合 0 個或多個 * 符合 0 個以上 + 符合 1 個以上 { 最少出現次數 / 最大出現次數的開始符號} 最少出現次數 / 最大出現次數的結束符號[^ ] 不包含 [ ] 中的字串[ - ] 指示字元的範圍
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}) 將兩個樣本群組成一個樣本
PHP5 與 MySQL5 入門學習指南
20-2 字串格式檢查PHP 提供 ereg() 函數可以檢查字串是否符合要求 , 其格式如下 : int ereg (string 樣本字串 , string 字串 [,array regs])
– 說明判斷 [ 字串 ] 的格式是否符合要求。搜尋一個字串是否符合 [ 樣本字串 ] 的格式。第三個選項設定後 , 字串片段會存入指定的陣列。 如果字串比對沒有錯誤則傳回 True 。
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] 會儲存年。
檢查日期格
式
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" 。
PHP5 與 MySQL5 入門學習指南
ereg() 需要注意英文字母大小寫 , 如果需要不區分英文字母大小寫 , 則可以使用 eregi() 函數 , 其格式如下。
int eregi (string 樣本 , string 字串 [,array regs])
這個函數功能與 ereg() 相同 , 除了忽略大小寫。
PHP5 與 MySQL5 入門學習指南
20-3 文字置換置換文字內容也是常使用功能。函數 ereg_replace() 會將符合格式的字串替換。其格式如下 : string ereg_replace (string 樣本字串 , string 替代文字 , string 字串 )
– 說明這個函數能夠掃描 [ 字串 ] 中符合 [ 樣本字串 ] 的部分 , 然後將符合的部分使用 [ 替代文字 ] 取代 , 再將修改過的字串傳回 ( 在這裡大小寫是當做不同的 ) 。如果沒有符合的部分 , 則會將原始的字串傳回。
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 加上超連結。
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 行顯示置換結果。
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 行顯示置換後的結果。
PHP5 與 MySQL5 入門學習指南
20-4 字串分解PHP 提供 split() 函數。 此函數可依照格式分隔字串。 其格式如下 : array split (string 樣本字串 , string 字串 [, int limit])
– 說明函數將原始 [ 字串 ] 依據 [ 樣本字串 ] 當分隔 , 順序儲存在陣列中 , 假如有參數 limit 有設定 , 那麼 limit 為陣列的大小。假如有錯誤發生 , split() 傳回 false, split() 函數中大小寫字元是當做不同的字元。
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 行顯示結果。
PHP5 與 MySQL5 入門學習指南
spliti() 函數函數格式如下 : array spliti (string 樣本字串 , string 字串 [, int limit])
– 說明 :功能和 split()完全相同 , 除了忽略大小寫。
PHP5 與 MySQL5 入門學習指南
sql_regcase() 提供產生忽略大小寫的合法正規化字串的功能。其格式如下 :
string sql_regcase (string 字串 )
說明 傳回一個忽略大小寫的合法正規化字串 , 這函數可以將字串中的每一個字轉換成一個 [] 符號包括起來的敘述 , [] 中的內容是這個字元的大寫及小寫。
sql_regcase()
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" 正規化。
PHP5 與 MySQL5 入門學習指南
問題與討論1. 何謂正規化 ?2. 請將範例 20-5以文字檔案方式讀入後 , 將 strin
g 加上底線後顯示出來。3. 請利用表單輸入一個電子郵件地址 , 並檢查此地址格式是否符合電子郵件地址格式。
4. 請利用表單輸入一串文字 , 將使用者輸入的文字串分解成單字。
5. 請將 "2020/10-30" 分解成 2020 年 10 月 30 日。