노벨보드 만들기 [7] > 자유게시판

자유게시판

노벨보드 만들기 [7] 정보

기타 노벨보드 만들기 [7]

본문

게시판 만들기 7화


오늘은 조금 쉬어 가는 의미에서 함수 몇개를 만들어 보도록 하겠습니다.

1. 정규 표현식
  정규 표현식이란 어떤 문장이 조건에 맞는지 검사하기 위한 표현식을 말합니다.
  eregi() 함수가 정규 표현식을 검사하는 함수 입니다.( 대소문자 구별 안함 )

  $문장내용 = "내용입력";
  $표현식 = "표현식";
  if( eregi( $문장내용, $표현식 ) ) {
    참일때 실행 내용
  }
  else {
    거짓일때 실행 내용
  }

  위와 같이 사용하시면 됩니다.
  아래는 예 입니다.

  $homepage = "http://www.sir.co.kr";
  $chek_homepage = "^http://[-a-z0-9]+(\.[-a-z0-9]+)+(/[^\\\/:\*\"<>\|]+(\.[^\\\/:\*\"<>\|]+)*)*/?$";
  if( eregi( $homepage, $chek_homepage ) ) {
    echo "홈페이지 주소입니다.";
  }
  else {
    echo "홈페이지 주소가 틀렸습니다.";
  }

  이제 정규 표현식을 만드는 방법을 알아 봅니다.

  [표현식] : 표현식으로 표현한 문자를 포함
  [^표현식] : 표현식으로 표현한 문자를 제외
  0-9 : 숫자 0 에서 9 까지
  a-z : 알파벳 a에서 z 까지
  * : 0번이상 포함
  + : 한번이상 포함
  \\, \*, \", \' 등등 : \는 특수문자 검색시 이용

  이제 부터 홈페이지 주소확인하는 정규 표현식을 만들어 보겠습니다.

  [-] : - 문자 포함
  [-0-9] : -, 0~9 포함
  [-0-9a-z] : -, 0~9, a~z 포함
  \.[-0-9a-z] : -, 0~9, a~z 포함, 앞에 . 포함
  [-0-9a-z] \.[-0-9a-z] : -, 0~9, a~z 포함  점찍고(^^;;) -, 0~9, a~z 포함
  [-0-9a-z]+ (\.[-0-9a-z]+) : -, 0~9, a~z 한번이상 포함  점찍고(^^;;) -, 0~9, a~z 한번이상 포함
  [-0-9a-z]+ (\.[-0-9a-z]+)+ : -, 0~9, a~z 한번이상 포함  점찍고(^^;;) -, 0~9, a~z 한번이상 포함을 점까지 묶어서 한번 이상 포함
  [-0-9a-z]+ (\.[-0-9a-z]+)+ : -, 0~9, a~z 한번이상 포함  점찍고(^^;;) -, 0~9, a~z 한번이상 포함을 점까지 묶어서 한번 이상 포함

  위의 내용은 sir.co.kr 등의 형식을 검사 ( 예를 든것임 )
  sir (한번이상 포함) .co .kr ( 한번이상 포함, 예에서는 2번 )
  주소에서 /디렉토리명/파일명 이 더 붙을 수 있으므로 더 추가 해 주어야 합니다.
  디렉토리명과 파일명은 특수 문자를 제외한 거의 모든 문자를 쓰므로 규칙을 정해줄 때 쓰지못하는 글자를 지정해 주는것이 간편할 수 있습니다.
  여기서는 특수문자만 쓰지 못하게 합니다.
  [^ ] 은 제외될 문자를 지정합니다.
  그러므로 위 예에서 사용한 형식으로 특수문자를 제외하도록 만듭니다.
  (/[^\\\/:\*\"<>\|]+(\.[^\\\/:\*\"<>\|]+)*)*/?"
  이 부분은 있을수도 없을 수도 있으므로 한번이상 포함을 의미하는 + 대신 0번이상을 포함하는 *을 사용합니다.
  홈페이지 수조 앞에 http:// 넣어야 하며 검사형식의 처음은 ^을 마지막은 $를 붙입니다.

  이것을 이용해 다음 함수들을 만들었습니다.

/* 자동 링크 */
function autolink( $link ) {
    $address[email] = "[-_a-z0-9 ]+(\.[-_a-z0-9 ]+)*@[-a-z0-9 ]+(\.[-a-z0-9 ]+)+";
    $link = eregi_replace( $address[email], "<a href='mailto:\\0'>\\0</a>", $link );

    $address[homepage]
        = "(mms|http|ftp|telnet)://[-a-z0-9]+(\.[-a-z0-9]+)+(/[^\\\/:\*\"<>\|]+(\.[^\\\/:\*\"<>\|]+)*)*/?";
    $link = eregi_replace( $address[homepage], "<a href='\\0' target=_blank>\\0</a>", $link );

    return $link;
}

/* 이메일 체크 */
function is_email( $email ) {
    $address[email] = "^[-_a-z0-9 ]+(\.[-_a-z0-9 ]+)*@[-a-z0-9 ]+(\.[-a-z0-9 ]+)+$";  // 이메일 주소 체크
    if( eregi( $address[email], $email ) ) return 1;
    return 0;
}

/* 홈페이지 체크 */
function is_homepage( $homepage ) {
    $address[homepage] = "^http://[-a-z0-9]+(\.[-a-z0-9]+)+(/[^\\\/:\*\"<>\|]+(\.[^\\\/:\*\"<>\|]+)*)*/?$";  // 홈페이지 주소 체크
    if( eregi( $address[homepage], $homepage ) ) return 1;
    return 0;
}

  자동링크는 홈페이지 주소나 이메일을 입력 받으면 링크로 리턴 시켜 주는 함수입니다.
  홈페이지 체크 방법과 같은 방식으로 이메일도 체크 할 수 있도록 함수를 만들었습니다.
  한번 분석해 보시기 바랍니다.

  다음 시간에는 전시간에 이어 install_ok.php 를 계속 이어 진행하겠습니다. ^_^

  추신 : 잘못된점이나 고쳐야 할점 추가되어야 할점등이 있으면 글 남겨 주세여
          잘하고 있는지 못하고 있는지 알 수가 없네여
          ( 스스로의 글이 마음에 들지 않음, 어떻게 써야할지 잘 모르겠음, 조언 부탁 바랍니다. )

--------------------
빠진 부분 추가

eregi_replace() : 정규 표현식을 일정한 형식으로 출력해 주는 함수
  사용법 :
    출력된 결과를 저장할 변수 = eregi_replace( 표현식, 출력할 형식지정, 입력받는 값 );
  결과 : 입력받은 값이 표현식에 맞는지 검사후 맞다면 출력할 형식으로 출력해서 결과를 저장할 변수에 저장

\0 : 정규 표현식 입력
  사용법 : 출력 형식을 넘겨주는 eregi_replace() 같은 함수에서 출력할 형식에서 표현식에 맞는 입력받은 값을 넘겨줌

예제 : $link = eregi_replace( $address[email], "<a href='mailto:\\0'>\\0</a>", $link );
  이메일 주소를 $link 에 입력 받았다면 이것을 출력할 형식지정에 넣어주고 표현식에 맞는지 검사후 맞다면 값을 겸겨줌
  $link = "*** 개인정보보호를 위한 이메일주소 노출방지 ***</a>", $link ); 와 같아지고 $link 내용이 표현식에 맞는지 확인후 결과를 넘겨줌

이상 위에서 빠진 설명 추가...

--------------------
또 빠진 부분 추가 ^^;;

자동링크에서 자동링크되는 것은 표현식에 맞는 문장만 입니다.
어떤 일정 문장중 이메일과 홈페이지 부분만 링크 하므로 앞과 뒤에 있는 다른 글들은 해당사항이 없습니다.
홈페이지/이메일 주소 체크 부분에서 표현식의 시작은 ^을 마지막은 $라고 했는데 위에서 이야기 한바와 같이 앞과 뒤에 다른 문장이 있을 수 있으므로 표현식으로 검색이 않됩니다.
그래서 자동링크에서는 표현식의 시작을 표시하는 ^와 마지막을 표시하는 $를 제거해 주어야 합니다.
^와$를 넣어주게 되면 문장의 처음이나 마지막이 이메일이나 홈페이지 주소가 아니면 무조건 틀리다고 판단합니다.
즉 문장과 문장 사이에 포함된 이메일주소와 홈페이지 주소가 자동링크 되지 않는다는 이야기가 됩니다.
이 점을 주의해 주셔야 합니다.
설명이 미숙하여 다소 복잡합니다. 그러나 결론은 자동링크에서 표현식의 처음과 끝을 표시하지 않아야 한다는 간단한 이야기를 였습니다.

빠진 부분이 발견될 때 마다 추가 하고 있습니다.
더 추가 되어야 하는 부분이 있으면 글 올려주세여~
추천
0

댓글 3개

전체 199,692 |RSS
자유게시판 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT