探討PHP ereg()函數(shù)與正則表達(dá)式的匹配
PHP語(yǔ)言中比較難掌握的一點(diǎn)要數(shù)正則表達(dá)式,通常初學(xué)者們都會(huì)在這上面耗掉許多時(shí)間。我們今天要為大家介紹的是POSIX擴(kuò)展庫(kù)中正則表達(dá)式的匹配函數(shù)——PHP ereg()函數(shù)。
#t#不過(guò),eregi()是PHP ereg()函數(shù)的忽略大小寫(xiě)的版本。二者與preg_match的功能類(lèi)似,但函數(shù)返回的是一個(gè)布爾值,表明匹配成功與否。需要說(shuō)明的是,POSIX擴(kuò)展庫(kù)函數(shù)的***個(gè)參數(shù)接受的是正則表達(dá)式字符串,即不需要使用分界符。例如,代碼6.2是一個(gè)關(guān)于文件名安全檢驗(yàn)的方法。
代碼6.2 文件名的安全檢驗(yàn)
- < ?php
- $username = $_SERVER['REMOTE_USER'];
- $filename = $_GET['file'];
- //對(duì)文件名進(jìn)行過(guò)濾,以保證系統(tǒng)安全
- if (!ereg('^[^./][^/]*$', $userfile))
- {
- die('這不是一個(gè)非法的文件名!');
- }
- //對(duì)用戶(hù)名進(jìn)行過(guò)濾
- if (!ereg('^[^./][^/]*$', $username))
- {
- die('這不是一個(gè)無(wú)效的用戶(hù)名');
- }
- //通過(guò)安全過(guò)濾,拼合文件路徑
- $thefile = "/home/$username/$filename";
- ?>
通常情況下,使用與Perl兼容的正則表達(dá)式匹配函數(shù)perg_match(),將比使用PHP ereg()函數(shù)或eregi()的速度更快。如果只是查找一個(gè)字符串中是否包含某個(gè)子字符串,建議使用strstr()或strpos()函數(shù)。