검색어 저장을 필터링 하려고 합니다. 특수문자
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.2 |
if(preg_match('/[0]|aaa/',$keyword))
이렇게 조건을 걸려다 보니 어제 다른 작업하다가 특수문자 취급을 해주려면 \를 먼저 써줘야 하더라구요.
if(preg_match('/\[0\]|aaa/',$keyword))
이렇게 해주면 될까요 ???
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.2 |
if(preg_match('/[0]|aaa/',$keyword))
이렇게 조건을 걸려다 보니 어제 다른 작업하다가 특수문자 취급을 해주려면 \를 먼저 써줘야 하더라구요.
if(preg_match('/\[0\]|aaa/',$keyword))
이렇게 해주면 될까요 ???
댓글 17
| 도 \| 로 쓰셔야 할 거예요.
귀찮으면 preg_quote 함수로 처리해 버리세요. 자동으로 다 해줍니다.
$pattern = '[0]|aaa';
if(preg_match('/' . preg_quote($pattern, '/') . '/', $keyword))
알려주신대로
$pattern = $addon_info->not_allow;
if(preg_match('/' . preg_quote($pattern, '/') . '/', $keyword)) return;
이렇게 처리해봤습니다.
엇.. 그러나 뭔가 잘 안되네요 ㅎ
|는 제외되어야 하는걸까요 ???
[0]|aaa 라는 문자열 그대로 찾으시려면 위와 같이 하시면 되고,
[0] 또는 aaa 를 찾으시려면 | 는 이스케이프 처리하지 않아야 합니다. | 가 "또는"이라는 의미이니까요.
$pattern = explode('|', $addon_info->not_allow);
if(preg_match('/' . implode('|', array_map(function($str) {
return preg_quote($str, '/');
}, $pattern)) . '/', $keyword)) return;
함수 경계를 알아보기 쉽도록 표시했습니다.
어떤 문맥에서 리턴하고 계신지 알 수 없으니...
[0]|테스트
이렇게 두개를 가지고 시험해 보았습니다.
처음에 수작업으로 미리 이스케이프 처리했을때는 잘 되었구요.
$addon_info->not_allow = '[0]|테스트';
$keyword = '이 키워드에는 [0]이라는 내용이 포함되어 있음';
이 상태에서 실행하면 리턴됩니다.
한글이라면 정규식 맨 뒤 '/' 를 '/u'로 바꿔보세요.
이건 중간중간에 변수 찍어봐야 알겠네요.