PHP에서 preg_match를 사용할 때“Unknown modifier 'g'in…”?


93

이것은 내가 사용하려는 정규식입니다.

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

나는 이 사이트 에서 그것을 찾았고 , 내가 그것을 시도 할 때 잘 작동한다. 그러나 코드에 삽입하자마자 다음 메시지가 표시됩니다.

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

누구든지 무엇이 잘못되었는지, 왜 내 코드가 아닌 해당 웹 사이트에서 작동하는지 설명 할 수 있습니까?


1
정규식으로 무엇을 하려는지 정확히 알고 있다면 더 나은 도움을 줄 수 있습니다. 그리고 더 나은 도움 이 필요 합니다. 아니면 정규식이 필요 합니다. 해당 사이트에서 사용할 수있는 잘못 작성된 모든 이메일 정규식 중에서 최악의 것을 선택했을 수 있습니다. : /
Alan Moore

2
참고로, 정규 표현식은 "-.-.-.--. @-some--domain--.com"과 같은 유형의 메일을 확인하고 이러한 유형의 유효한 메일은 "info@subdomain.com"을 확인하지 않습니다. domain.com ". 마지막으로 \ w는 PHP preg가 Javascript와 같은 POSIX가 아닌 Perl 호환 정규식을 사용하기 때문에 매우 위험합니다. PHP가 미국 / 영국 지역화되지 않은 서버에서 실행되는 경우 \ w는 악센트 부호가있는 문자와도 일치하므로 "àèìòù@domain.com"과 일치하면 유효한 메일이 있습니다. 자세한 내용은 여기에서 확인하세요 : it.php.net/manual/en/function.preg-replace.php#92443
Marco Demaio

답변:


170

어떤 수정도 없다 g위한 preg_match. 대신 preg_match_all함수 를 사용해야합니다 .

그래서 대신 :

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

사용하다:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.