[PHP] [其他] 無痛學習【正規表示法(Regular expressions)】

在 PHP 中,我們可以使用各種函式來驗證表單資料格式,但最靈活且強大的方式是使用「正規表示法(Regular Expression)」。 正規表示法可以幫助你快速檢查字串是否符合指定規則,例如檢查 Email、密碼、電話號碼等格式。本文將介紹 PHP 正規表示法的基本用法,並透過範例說明如何使用。

PHP 正規表示法與 preg_match()

在 PHP 中,我們通常搭配 preg_match() 函式來使用正規表示法,語法如下:

preg_match("/正規條件字串/", "欲驗證的字串");

如果字串符合正規條件,函式會回傳 true,否則回傳 false。

1. 基本用法

最簡單的例子是比對字串是否包含特定字元:

preg_match("/b/", "abcd");      // true,字串中有 b
preg_match("/b/", "ABCD");      // false,沒有小寫 b
preg_match("/bc/", "abcd");     // true,包含 bc
preg_match("/bc/", "abxxxcd");  // false,不連續出現 bc
preg_match("/abcd/", "b");      // false,完全不符合

2. 特殊符號 - 中介字元

正規表示法提供一些特殊符號,用來匹配特定類型的字元。

`.` 匹配任何字元:

preg_match("/a.c/", "abc");  // true
preg_match("/a.c/", "a1c");  // true
preg_match("/a.c/", "a@c");  // true

\d 匹配數字字元(0-9):

preg_match("/\d/", "1");  // true
preg_match("/\d/", "a");  // false
preg_match("/\d/", "@");  // false

\w 匹配字母或數字(a-z, A-Z, 0-9):

preg_match("/\w/", "1");  // true
preg_match("/\w/", "a");  // true
preg_match("/\w/", "@");  // false

\s 匹配空白字元(空格、tab、換行):

preg_match("/\s/", " ");   // true
preg_match("/\s/", "\t");  // true
preg_match("/\s/", "\n");  // true
preg_match("/\s/", "a");   // false

3. 字串開頭與結尾

^ 指定字串必須以某個字元或字串開頭:

preg_match("/^b/", "bc");       // true
preg_match("/^b/", "abc");      // false
preg_match("/^\d/", "1a");      // true,開頭是數字
preg_match("/^\d\d/", "12");    // true,開頭兩位是數字
preg_match("/^abc/", "abcde");  // true

$ 指定字串必須以某個字元或字串結尾:

preg_match("/b$/", "ab");       // true
preg_match("/b$/", "abc");      // false
preg_match("/\d$/", "a1");      // true,結尾是數字
preg_match("/abc$/", "xabc");   // true

4. 量詞 - 控制字元出現次數

量詞用來指定前一個字元可以出現的次數:

* 出現 0 次或多次(等同 {0,}):

preg_match("/a*/", "");   // true
preg_match("/a*/", "a");  // true
preg_match("/a*/", "aa"); // true

+ 出現 1 次或多次(等同 {1,}):

preg_match("/a+/", "");   // false
preg_match("/a+/", "a");  // true
preg_match("/a+/", "aa"); // true

? 出現 0 次或 1 次(等同 {0,1}):

preg_match("/a?/", "");   // true
preg_match("/a?/", "a");  // true
preg_match("/a?/", "aa"); // true

{n} 精確出現 n 次:

preg_match("/a{1}/", "");   // false
preg_match("/a{1}/", "a");  // true
preg_match("/a{1}/", "aa"); // true

5. 小技巧與練習資源

註1:正規表示法中可以使用括號 () 來群組或運算。 註2:可以到 Regex101 線上測試 練習正規表示法。

練習建議:先從簡單字元匹配開始,逐步加入量詞與特殊符號,觀察匹配結果,幫助理解每個符號的作用。