[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 線上測試 練習正規表示法。
練習建議:先從簡單字元匹配開始,逐步加入量詞與特殊符號,觀察匹配結果,幫助理解每個符號的作用。