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