0

ここで関数を以下のコードの関数にeregi()置き換えるにはどうすればよいですか?preg_match()

function getOS($userAgent) {
  // Create list of operating systems with operating system name as array key 
    $oses = array (
        'iPhone' => '(iPhone)',
        'Windows 3.11' => 'Win16',
        'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)', // Use regular expressions as value to identify operating system
        'Windows 98' => '(Windows 98)|(Win98)',
        'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
        'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
        'Windows 2003' => '(Windows NT 5.2)',
        'Windows Vista' => '(Windows NT 6.0)|(Windows Vista)',
        'Windows 7' => '(Windows NT 6.1)|(Windows 7)',
        'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
        'Windows ME' => 'Windows ME',
        'Open BSD'=>'OpenBSD',
        'Sun OS'=>'SunOS',
        'Linux'=>'(Linux)|(X11)',
        'Safari' => '(Safari)',
        'Macintosh'=>'(Mac_PowerPC)|(Macintosh)',
        'QNX'=>'QNX',
        'BeOS'=>'BeOS',
        'OS/2'=>'OS/2',
        'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)'
    );

    foreach($oses as $os=>$pattern){ // Loop through $oses array
    // Use regular expressions to check operating system type
        if(eregi($pattern, $userAgent)) { // Check if a value in $oses array matches current user agent.
            return $os; // Operating system was matched so return $oses key
        }
    }
    return 'Unknown'; // Cannot find operating system so return Unknown
}
4

2 に答える 2

2

大文字と小文字を区別しない一致を有効にするには、正しいパターン区切り文字の後に「i」を追加する必要があります

それで:

a|b 

になります:

/a|b/i

これをすばやく行うには、preg_match の前に次のように記述します。

$pattern='/'.$pattern.'/i';

それ以外の場合は、すべてのパターンを変更して、次のように置き換える必要があります。

(Linux)|(X11)

になる

/(Linux)|(X11)/i
于 2012-03-31T07:52:47.300 に答える
0

どちらでも使用できます

if(preg_match("#".$pattern."#", $userAgent)) {

また

 if(preg_match('`'.$pattern.'`i', $userAgent)) {
于 2013-08-24T01:56:45.050 に答える