Extra Form
PHP PHP 7.2
CMS XpressEngine

 

if(preg_match('/[0]|aaa/',$keyword))

 

이렇게 조건을 걸려다 보니 어제 다른 작업하다가 특수문자 취급을 해주려면 \를 먼저 써줘야 하더라구요.

 

if(preg_match('/\[0\]|aaa/',$keyword))

 

이렇게 해주면 될까요 ???

  • profile

    | 도 \| 로 쓰셔야 할 거예요.

    귀찮으면 preg_quote 함수로 처리해 버리세요. 자동으로 다 해줍니다.


    $pattern = '[0]|aaa';

    if(preg_match('/' . preg_quote($pattern, '/') . '/', $keyword))

  • profile profile
    오 요런 방법이 있군요. 감사합니다.
  • profile profile

    알려주신대로
    $pattern = $addon_info->not_allow;
    if(preg_match('/' . preg_quote($pattern, '/') . '/', $keyword)) return;

    이렇게 처리해봤습니다.

    엇.. 그러나 뭔가 잘 안되네요 ㅎ

  • profile profile
    아까 테스트 해본바로는 | 는 처리되지 않아야하던데요.

    |는 제외되어야 하는걸까요 ???
  • profile profile

    [0]|aaa 라는 문자열 그대로 찾으시려면 위와 같이 하시면 되고,
    [0] 또는 aaa 를 찾으시려면 | 는 이스케이프 처리하지 않아야 합니다. | 가 "또는"이라는 의미이니까요.

  • profile profile
    네. 또는 입니다. | 를 제외하려면 어떻게 해야 할까요??
  • profile profile

    $pattern = explode('|', $addon_info->not_allow);
    if(preg_match('/' . implode('|', array_map(function($str) {
        return preg_quote($str, '/');
    }
    , $pattern)) . '/', $keyword)) return;

     

    함수 경계를 알아보기 쉽도록 표시했습니다.

  • profile profile
    감사합니다. preg_quote 를 사용하면서 I 는 적용 안하려니 좀더 까다로워 지는군요.
  • profile profile
    XE는 어떤 문법으로 구현했는지 모르겠지만, 라이믹스에서는 embed filter처럼 다수의 문자열을 한 방에 검색해야 할 때 자주 사용하는 패턴입니다. 여기저기 쓸모가 많습니다. 검색할 문자열들이 쉼표나 줄바꿈으로 구분되어 있더라도 첫 줄의 explode만 바꾸면 활용할 수 있지요.
  • profile profile
    그런데 뭔가 잘못 되었는지 그냥 뚫리네요.
  • profile profile
    리턴하지 말아야 하는데 리턴이 되는 건가요? 아니면 리턴해야 하는데 안 하는 건가요?
    어떤 문맥에서 리턴하고 계신지 알 수 없으니...
  • profile profile
    리턴이 안되고 그냥 통과 되어 버립니다.
    [0]|테스트

    이렇게 두개를 가지고 시험해 보았습니다.
    처음에 수작업으로 미리 이스케이프 처리했을때는 잘 되었구요.
  • profile profile
    알려드린 구문만 따로 떼어 테스트해 보았을 때는 잘 됩니다.
    $addon_info->not_allow = '[0]|테스트';
    $keyword = '이 키워드에는 [0]이라는 내용이 포함되어 있음';
    이 상태에서 실행하면 리턴됩니다.
  • profile profile
    2번째 단어가 안됩니다. ㅜㅡ
  • profile profile
    음... 저는 두번째 단어도 되던데요...
    한글이라면 정규식 맨 뒤 '/' 를 '/u'로 바꿔보세요.
  • profile profile
    아니면 어딘가 눈에 보이지 않는 특수문자가 잘못 들어갔거나...
    이건 중간중간에 변수 찍어봐야 알겠네요.
  • profile profile
    앗. 죄송합니다. 지난번처럼 눈에 잘 차이가 없는 공백이 하나 들어갔습니다. 눈이 멍충이네요.