Friday, August 13, 2010

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

雖然PHP提供很多函式可以應用在表單資料格式的驗證上,但是,最方便的還是使用【正規表示法】去驗證資料格式(註:正規表示法有很多種格式,PHP使用的是POSIX),在此介紹一些最基本的用法...



PHP使用正規表示法進行驗證,需搭配preg_match()之類的函式來使用,例如:preg_match("/(正規條件字串)/","(欲驗證字串)"),如果欲驗證字串符合正規條件字串,則回傳true,反之回傳false。

基本用法:
preg_match("/b/","abcd");---true
preg_match("/b/","ABCD");---false
preg_match("/bc/","abcd");---true
preg_match("/bc/","abxxxcd");---false
preg_match("/abcd/","b");---false

特殊符號-中介字元:
.

比對任何字元
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-zA-Z0-9]相同)
preg_match("/\w/","1");---true
preg_match("/\w/","a");---true
preg_match("/\w/","@");---false

\s
比對空白字元(包括空格、tab、換行enter)
preg_match("/\s/"," ");---true (註:空格)
preg_match("/\s/"," ");---true (註:tab)
preg_match("/\s/","
");---true (註:換行enter)
preg_match("/\s/","a");---false

^
字串需以指定字元或字串起始 (註:^符號前不能有任何字元)
preg_match("/^b/","bc");---true
preg_match("/^b/","abc");---false
preg_match("/^\d/","1a");---true
preg_match("/^\d/","a1");---false
preg_match("/^\d\d/","12");---true
preg_match("/^\d\d/","1x2");---false
preg_match("/^abc/","abcde");---true
preg_match("/^abc/","xabcde");---false
preg_match("/^abc/","axbcde");---false

$
字串需以指定字元或字串結束 (註:$符號後不能有任何字元)
preg_match("/b$/","ab");---true
preg_match("/b$/","abc");---false
preg_match("/\d$/","a1");---true
preg_match("/^\d/","1a");---false
preg_match("/abc$/","xabc");---true
preg_match("/abc$/","abcd");---false
preg_match("/abc$/","axbc");---false

特殊符號-量詞:
*
量詞前指定字元有出現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

註1:在正規表示法中也可以使用數學式中的"()"

註2:可以 線上測試 的網站

No comments:

Post a Comment