Regex 정규식 질문
본문
$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자까지인데 그 이하에서 잘린다면 다른 문제겠네요.
잘린다는 원문 제목과 잘린 후의 제목이 궁금하네요. @_@);;;