一個PHP常用email校驗語句的解釋
作者:Eve Cole
更新時間:2009-06-06 18:17:18
相信好好學過PHP的人都應該知道下面這段用於eamil校驗的語句,但是真正能看懂的就不多了:
<?php
if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[az]{2,3}$",$ email)) {
echo "您的E-Mail 通過初步檢查";
}
?>
在這句話裡,首先是應用了一個eregi函數,這個函數還算好理解。隨便找本書,就能給你一段解釋:
語法: int ereg(string pattern, string string, array [regs]);
傳回值: 整數/陣列本函數以pattern 的規則來解析比對字串string。
比對結果回傳的值放在陣列參數regs 之中,regs[0] 內容就是原字串string、regs[1] 為第一個合乎規則的字串、regs[2] 就是第二個合乎規則的字串,餘類推。若省略參數regs,則只是單純地比對,找到則傳回值為true。
而不太好理解的就是前面的這段正規表示式了:^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[ az]{2,3}$
在這段正規表示式中,「+」表示前面的字串連續出現一個或多個;「^」表示下一個字串必須出現在開頭,「$」表示前一個字串必須出現在結尾;
“.”也就是“.”,這裡“”是轉義符;“{2,3}”表示前面的字串可以連續出現2-3次。 「()」表示包含的內容必須同時出現在目標物件中。 「[_.0-9a-z-]」表示包含在「_」、「.」、「-」、從a到z範圍內的字母、從0到9範圍內的數字中的任意字元;
這樣一來,這個正規表示式可以這樣翻譯:
「下面的字元必須在開頭(^)」、「該字元必須包含在「_」、「.」、「-」、從a到z範圍內的字母、從0到9範圍內的數字中([ _.0-9a-z-])」、「前面這個字元至少出現一次(+)」、@、「該字串由一個包含在從a到z範圍內的一個字母、從0到9範圍內的數字中的字符開頭,後面跟至少一個包含在“-”、從a到z範圍內任何一個字母、從0到9範圍內任何一個數字中的字符,最後以.結束(([0-9a -z][0-9a-z-]+.))」、「前面這個字元至少出現一次(+)」、「從a到z範圍內的字母出現2-3次,並以它結束([ az]{2,3}$)”
很繁雜是吧,對了,正因為這樣,人們才會使用正規表示式。