我們常常用下面的正則表達(dá)式來判斷用戶輸出的email地址是否合法,可能大家都會用,但是能夠真正理解的人不多,本文詳細(xì)地講解了這個正則表達(dá)式中各個部分的含義,希望大家能有所獲。
<?php
if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
echo "您的 E-Mail 通過初步檢查";
}
?>
在這句話里,首先是應(yīng)用了一個eregi函數(shù),這個函數(shù)還算好理解。隨便找本書,就能給你一段解釋:
語法: int ereg(string pattern, string string, array [regs]);
返回值: 整數(shù)/數(shù)組
本函數(shù)以 pattern 的規(guī)則來解析比對字符串 string。
比對結(jié)果返回的值放在數(shù)組參數(shù) regs 之中,regs[0] 內(nèi)容就是原字符串 string、regs[1] 為第一個合乎規(guī)則的字符串、regs[2] 就是第二個合乎規(guī)則的字符串,余類推。若省略參數(shù) regs,則只是單純地比對,找到則返回值為 true。
而不太好理解的就是前面的這段正則表達(dá)式了:^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$
在這段正則表達(dá)式中,“+”表示前面的字符串連續(xù)出現(xiàn)一個或多個;“^”表示下一個字符串必須出現(xiàn)在開頭,“$”表示前一個字符串必須出現(xiàn)在結(jié)尾;
“.”也就是“.”,這里“”是轉(zhuǎn)義符;
“{2,3}”表示前面的字符串可以連續(xù)出現(xiàn)2-3次。
“()”表示包含的內(nèi)容必須同時出現(xiàn)在目標(biāo)對象中。
“[_.0-9a-z-]”表示包含在“_”、“.”、“-”、從a到z范圍內(nèi)的字母、從0到9范圍內(nèi)的數(shù)字中的任意字符;
這樣一來,這個正則表達(dá)式可以這樣翻譯:
“下面的字符必須在開頭(^)”、
“該字符必須包含在“_”、“.”、“-”、
從a到z范圍內(nèi)的字母、從0到9范圍內(nèi)的數(shù)字中([_.0-9a-z-])”、
“前面這個字符至少出現(xiàn)一次(+)”、@、“該字符串由一個包含在從a到z范圍內(nèi)的一個字母、
從0到9范圍內(nèi)的數(shù)字中的字符開頭,后面跟至少一個包含在“-”、
從a到z范圍內(nèi)任何一個字母、從0到9范圍內(nèi)任何一個數(shù)字中的字符,最后以.結(jié)束(([0-9a-z][0-9a-z-]+.))”、
“前面這個字符至少出現(xiàn)一次(+)”、
“從a到z范圍內(nèi)的字母出現(xiàn)2-3次,并以它結(jié)束([a-z]{2,3}$)”
怎么樣,正則表達(dá)式表達(dá)的內(nèi)容很豐富吧,有興趣的可以好好學(xué)習(xí)一下正則表達(dá)式了,在網(wǎng)頁編程中是非常有用的東西。
新聞熱點(diǎn)
疑難解答