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