Regex 정규식 질문

Regex 정규식 질문

QA

Regex 정규식 질문

본문

/bbs/write_update.php


$wr_subject = '';
if (isset($_POST['wr_subject'])) {
    $wr_subject = substr(trim($_POST['wr_subject']),0,255);
    $wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject);
}

 

 

요 #[\\\]+$# 사탕같이 생긴 정규식은 무슨 뜻인가요? 지우면 안되나요?

글자가 몇개 짤리는거 같아요.

이 질문에 댓글 쓰기 :

답변 1

#[\\\]+$#

 

앞뒤의 #는 Delimiters (구분자, 구분 기호, 구획 문자)입니다.

- https://www.php.net/manual/en/regexp.reference.delimiters.php

 

[]는 Character classes (문자 클래스)입니다.

- https://www.php.net/manual/en/regexp.reference.character-classes.php

 

\\\는 Escape sequences (이스케이프 시퀀스)입니다. \\\\ 4개 써야 하는데, 3개로 통과가 되네요.

- https://www.php.net/manual/en/regexp.reference.escape.php

 

+는 Repetition (반복)입니다.

- https://www.php.net/manual/en/regexp.reference.repetition.php

 

$는 Meta-character (메타 문자)입니다.

- https://www.php.net/manual/en/regexp.reference.meta.php

 

$wr_subject 문자열에서 끝 쪽의 한 글자 이상의 역슬래시 제거 용도네요.

 

[]로 감쌀 필요없이 #\\\+$#으로 해도 무방하며,

그냥 $wr_subject = rtrim($wr_subject, '\\'); 처럼 문자열 함수 사용해도 무방합니다.

 

$wr_subject = substr(trim($_POST['wr_subject']),0,255);

글자가 몇 개 잘린다고 하는 것은 이 부분 원인이겠네요.

255바이트까지 자르는데, UTF-8에선 한글이 3바이트 이상이라 제목이 길면 잘릴 수 있겠네요.

DB에서 VARCHAR(255)라고 하면 그냥 mb_substr($wr_subject, 0, 255, 'UTF-8'); 쓰면 되는데….

 

어라? 3바이트로 잘라도 한글 85자까지인데 그 이하에서 잘린다면 다른 문제겠네요.

잘린다는 원문 제목과 잘린 후의 제목이 궁금하네요. @_@);;;

최근 5.4.18 버전 받아서 찾아보니 있네요.
/bbs/qawrite_update.php
/bbs/write_update.php
제목, 내용, 링크(MEDIUMTEXT인데 1000바이트 자름),
qa_content도 MEDIUMTEXT(16,777,215)인데 65536으로 자르네요.
:

답변을 작성하시기 전에 로그인 해주세요.
전체 1,435
QA 내용 검색

회원로그인

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