2013-04-25 3 views
-5

이 질문은 질문되었지만 내 상황에서이 문제를 해결하는 방법을 모르겠습니다.PHP - 구분 기호는 영숫자 또는 백 슬래시가 아니어야합니다.

PHP 메시지 : PHP 경고 :는 preg_match() : 나는 다음의 PHP errror을 얻고 구분 기호 라인 227

라인 227에 ... 영숫자 또는 백 슬래시가 아니어야하는 것은 다음과 같다 :

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

그리고 기능 :

$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; 
} 
} 
+0

보기 : http://stackoverflow.com/questions/7660545/delimiter-must-not-be-alphanumeric-or-backslash-and-preg-match?rq=1 다음에 먼저 인터넷 검색을 시도 ... – Ihsan

+0

문제의 코드에는 아무런 노력이 없습니다. 기본적으로 코드를 작성해야합니다. 특정 질문을하십시오. 제출을 누르기 전에 검색하십시오. – hakre

답변

0

하여 적절한 작업을 수행해야합니다 이스케이프해야하는 모든 항목에서 이스케이프 처리합니다. 그래서 도주

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

. /? * etc 등은 모두 preg에 특별한 것이므로 이스케이프하지 않거나 자신의 "특수 능력"을 사용하고자 할 때 패턴에 사용하면 안됩니다.

업데이트 : 코드 블록에 이스케이프를 표시해야합니다.)

0

PHP Manual - Delimiters에서 :

PCRE 함수를 사용하여,이 패턴으로 둘러싸인 분리 것이 요구된다. 구분 기호는 영숫자가 아닌 백 슬래시가 아닌 공백 문자가 될 수 있습니다.

자주 사용되는 구분 기호는 슬래시 (/), 해시 기호 (#) 및 물결표 (~)입니다. 다음은 모두 유효 범위가 지정된 패턴의 예입니다.

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