-5

This question has been asked but I don't know how to fix this problem in my situation. I am getting the following php errror:

PHP message: PHP Warning: preg_match(): Delimiter must not be alphanumeric or backslash in... on line 227

Line 227 is the following:

if (preg_match($Match, $_SERVER['HTTP_USER_AGENT']))

And function:

$OSList = array (
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Server 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 7.0)',
'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)',
'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
'QNX' => 'QNX',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2'
);

foreach($OSList as $CurrOS=>$Match)
{

if (preg_match($Match, $_SERVER['HTTP_USER_AGENT']))
{
break;
}
}
George
  • 36,413
  • 9
  • 66
  • 103
user1406271
  • 297
  • 1
  • 3
  • 12
  • look : http://stackoverflow.com/questions/7660545/delimiter-must-not-be-alphanumeric-or-backslash-and-preg-match?rq=1 Next time try googling first... – Volkan Apr 25 '13 at 08:28
  • There is no effort of anything with the code in question. You are basically asking to complete the code for you. Please ask a specific question. And before pressing submit, search for it. – hakre Apr 25 '13 at 08:28

2 Answers2

0

make sure to do proper escapes on anything that needs escaping. So escape

OS/2 to OS\/2 
7.0 to 7\.0 
etc.

. / ? * etc etc are all special to preg, so you should not use them in your pattern unless you escape them or when you want to use their "special powers"

UPDATE: Had to put it in codeblock to see the escapes ;)

nvanesch
  • 2,540
  • 14
  • 25
0

From PHP Manual - Delimiters:

When using the PCRE functions, it is required that the pattern is enclosed by delimiters. A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.

Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.

/foo bar/
+php+ %[a-zA-Z0-9_-]%
#^[^0-9]$#