- 어떠한 형식에 맞춰 일치하는 결과를 가지고 올 수 있는 것

가끔 정규식을 분석해야 할 때가 있다. 그래서 한번 정리해 보았다.

 

정규식에 사용되는 기호

^    (caret) 문장의 시작

$    (dollar) 문장의 끝

.    (period) 줄바꿈 또는 단일문자 ex) h.t  => hat, hothit, hut, h7t. 등 검출

[]    (bracket) 문자의 집합이나 범위를 나타냄, 두 문자 사이에 – 는 범위를 나타냄

{}    (braced) {} 내의 숫자는 직전의 선행 문자 수를 나타냄

*    (asterisk) 직전의 선행문자가 0번 또는 그이상 나타냄

+    (asterisk) 직전의 선행문자가 1번 이상 나타냄

?    (asterisk) 직전의 선행문자가 0번 또는 1번 나타냄

|    (bar) or 을 나타냄

\    (backslash) 위에서 사용하는 특수문자를 정규식내에서 문자로 취급하고 싶을 때 \를 선행 기술

 

예1)

abc    abc 가 있는 것

^abc    abc 로 시작하는 것

abc$    abc 로 끝나는 것

^abc$    abc 로 시작하고 끝나는 것

[abc]    a,b,c 전부중 하나 포함한 경우

[a-z]    a 에서 z 중 하나 포함한 경우

^[0-9]    숫자 0~9 아무 숫자나 상관없으니 숫자로 시작하는 패턴을 찾는 것

[^0-9]    숫자가 들어있지 않는 패턴을 찾는 것

^[^0-9]    숫자가 들어있지 않는 문자로 시작하는 패턴을 찾는 것

a{3}    a 의 3번 반복인 aaa 인 것

a{3,}    a 가 3번 이상 반복인 것, aaa, aaaa, aaaaa

[0-9]{2}    두자리 숫자

abc[7-9]{2}    abc 포함 7에서 9까지 2자리 숫자 포함, abc77, abc78, abc97

 

예2) 대표적으로 많이 사용하는 정규식

 

이메일

"/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"

 

집전화 : 지역번호가 들어간 전화번호 확인

"/^(070|02|031|032|033|041|042|043|051|052|053|054|055|061|062|063|064)-\d{3,4}-\d{4}$/u"

 

휴대폰번호 : 휴대폰 번호만 입력받을 경우

"/^(010|011|016|017|018|019)-\d{3,4}-\d{4}$/u"

 

우편번호

"/^\d{3}-?\d{3}$/u"

 

아이디 : 영숫자만 허용, 첫글자는 영문자로 시작, 4~8자리 이내로 입력

"/^[a-zA-Z]\w{2,7}$/u"

 

주민번호 : 숫자 13자리, 가운데 – 는 입력 해도 안해도 됨

"/^\d{2}[0-1]\d[0-3]\d-?[1-6]\d{6}$/u"

 

정규식을 이용한 치환

preg_replace( "치환될 정규식", "변환값","원본 문자열");

 

예) 태그 제거

 

iframe 제거 

$STRING=preg_replace("!<iframe(.*?)<\/iframe>!is","",$STRING);

 

&nbsp;  제거

$STRING=str_replace("&nbsp;"," ",$STRING);

 

복수 공백 하나로

$STRING=preg_replace("/\s{2,}/"," ",$STRING)

 

태그안에 style 속성 제거

$STRING=preg_replace("/ style=([^\"\']+) /"," ",$STRING); // style=border:0... 따옴표가 없을때
$STRING=preg_replace("/ style=(\"|\')?([^\"\']+)(\"|\')?/","",$STRING); // style="border:0..." 따옴표 있을때

 

태그안의 width=, height= 속성 제거

$STRING=preg_replace("/ width=(\"|\')?\d+(\"|\')?/","",$STRING);
$STRING=preg_replace("/ height=(\"|\')?\d+(\"|\')?/","",$STRING);

 

'웹프로그래밍 > PHP' 카테고리의 다른 글

Open /etc/postfix/main.cf: Permission denied  (0) 2016.01.13
PHP에서 csv로 저장시 연락처 0 삭제 방지  (0) 2015.10.23
정규식 정리  (0) 2015.06.14
[php] 파일 이동, 복사 함수  (0) 2015.04.15
PHP + jQuery AJAX Upload  (0) 2015.04.10
PHP XML CDATA Parsing  (0) 2015.04.10

php에서는 copy함수를 이용하여 간단하게 파일을 복사하거나 unlink(또는 delete)함수로 파일을 삭제할 수 있습니다. 이 두 함수는 복사, 삭제에 성공할 경우 true를, 실패하면 오류 코드 메시지를 표시하므로 함수 앞에 @를 붙여 보안 유효성을 높여 주도록 합니다.

bool copy ( string $source , string $dest [, resource $context ] ) (PHP 4, PHP 5)

 copy(원본 파일명, 복사 파일명);
 unlink(삭제 파일명);

대상 파일이 이미 존재하면 덮어 쓰는 점에 주의가 필요합니다. 다음은 파일 복사 예제입니다.

예제 (ex #1

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 // 실제 존재하는 파일인지 체크...
 
if(file_exists($oldfile
)) {
      if(!
copy($oldfile$newfile
)) {
            echo 
"파일 복사 실패"
;
      } else if(
file_exists($newfile
)) {
            echo 
"파일 복사 성공"
;
      }
 }
 
?>


다음은 파일 이동 예제입니다.

예제 (ex #2

 <?php
 
// test.php파일을 test.txt로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.txt'
// 복사파일

 // 실제 존재하는 파일인지 체크...
 
if(file_exists($oldfile
)) {
      if(!
copy($oldfile$newfile
)) {
            echo 
"파일 복사에 실패하였습니다."
;
      } else if(
file_exists($newfile
)) {
            
// 복사에 성공하면 원본 파일을 삭제합니다.
            
if(!@unlink($oldfile
)){
                 if(@
unlink($newfile
)){
                      echo 
"파일이동에 실패하였습니다."
;
                 }
            }
      }
 }
 
?>


단순히 파일이름만 변경 원할 경우 rename함수를 이용하면 됩니다. 이 함수는 파일(또는 폴더)의 이름을 변경합니다. 성공하면 true를, 실패하면 false를 반환합니다.

bool
rename ( string $oldname , string $newname [, resource $context ] ) (PHP 4, PHP 5)

예제 (ex #3

 <?php
 
// dir1 폴더를 dir2폴더로 이름을 변경합니다.
 
if(rename("dir1","dir2"
)){
     echo 
"이름 변경 성공"
;
 }

 
// file1.php을 file2.php로 이름을 변경합니다.
 
if(rename("file1.php","file2.php"
)){
     echo 
"이름 변경 성공"
;
 }
 
?>


단순히 copy, unlink함수를 이용하지 않고, fopen함수로 표현이 가능합니다. 다음이 그 좋은 예입니다.

예제 (ex #4

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 
if(file_exists($oldfile
)) {
      
$data file_get_contents($oldfile
);
      
$fp fopen($newfile'w+'
);
      if(
is_resource($fp
)){
            
fputs($fp$data
);
      }
      
fclose($fp
);
 }
 
?>


예제 (ex #5

 <?php
 
// test.php파일을 복사본 test.php.bak로 만듭니다.
 
$oldfile 'test.php'
// 원본파일
 
$newfile 'test.php.bak'
// 복사파일

 
if(file_exists($oldfile
)) {
     
$fold fopen($oldfile,'r'
); 
     if(
is_resource($fold
)){
            
$fnew fopen($newfile,'w+'
); 
            
$len stream_copy_to_stream($fold,$fnew
); 
            
fclose($fold
); 
            
fclose($fnew
); 
     }
 }
 
?>

 

 

출처 : http://blog.habonyphp.com/62#.VS3Qm2ccS70

 

'웹프로그래밍 > PHP' 카테고리의 다른 글

PHP에서 csv로 저장시 연락처 0 삭제 방지  (0) 2015.10.23
정규식 정리  (0) 2015.06.14
[php] 파일 이동, 복사 함수  (0) 2015.04.15
PHP + jQuery AJAX Upload  (0) 2015.04.10
PHP XML CDATA Parsing  (0) 2015.04.10
PHP DOMDocument getting Attribute of Tag  (0) 2015.04.10

1. input file tag on event

 

$('#tmp_widget_file').on('change', prepareUpload);
  function prepareUpload(event){files = event.target.files}
  $('#twf').on('submit', uploadFiles);

 

2. uploadFiles function

 

function uploadFiles(event){
 event.stopPropagation();
 event.preventDefault();

 var data = new FormData();
 $.each(files, function(key, value){
  data.append(key, value);
 });

 $.ajax({
  url: './page/getWidgetInfo.php?files',
  type: 'POST',
  data: data,
  cache: false,
  dataType: 'json',
  processData: false,
  contentType: false,
  success: function(data, textStatus, jqXHR){
   if(typeof data.error === 'undefined'){
    console.log(data);
   }else{
    console.log('ERRORS1: ' + data.error);
   }
  },
  error: function(jqXHR, textStatus, errorThrown){
   console.log('ERRORS2: ' + textStatus);
  }
 });
}

 

3. upload exe php

 

$data = array();
if(isset($_GET['files'])){
 $error = false;
 $filevar = "";
 $error_msg = "There was an error uploading your files";

 $uploaddir = '/home/namo/public_html/tmp/';
 foreach($_FILES as $file){
  if(move_uploaded_file($file['tmp_name'], $uploaddir.basename($file['name']))){
   $filevar = $file['name'];
  }else{
   $error = true;
  }
 }
 $data = ($error) ? array('error' => $error_msg) : array('files' => $filevar);

}

'웹프로그래밍 > PHP' 카테고리의 다른 글

정규식 정리  (0) 2015.06.14
[php] 파일 이동, 복사 함수  (0) 2015.04.15
PHP + jQuery AJAX Upload  (0) 2015.04.10
PHP XML CDATA Parsing  (0) 2015.04.10
PHP DOMDocument getting Attribute of Tag  (0) 2015.04.10
임시로 PHP오류 출력할 때  (0) 2015.04.10

define(INFO, $path."info.xml");

$infoXML = new DOMDocument();

$infoXML->load(INFO);

$category = getXMLTextContent($infoXML, "group");

 

function getXMLTextContent($xml, $field){
 $vars = $xml->getElementsByTagName($field);
 foreach($vars as $var){
  foreach($var->childNodes as $child) {
   if ($child->nodeType == XML_CDATA_SECTION_NODE) {
    return $child->textContent;
   }
  }
 }
}

 

$xmldoc = new DOMDocument();
$xmldoc
->load('api response address');
foreach ($xmldoc->getElementsByTagName('item') as $feeditem) {
    $nodes
= $feeditem->getElementsByTagName('file');
    $linkthumb
= $nodes->item(0)->getAttribute('data');
    echo $linkthumb
;
}

일부 호스팅 환경에서는 PHP오류발생시 500에러코드로 분류되며 흰 공백화면으로 띄며 모든 작업이 중단되는 경우가 있다. 이럴 때 php 오류가 어느 라인에서 발생했는지 알수없어 답답하다.

그럴떄 아래와 같은 방법을 쓰면 된다.

 

error_reporting(E_ALL);
ini_set("display_errors", 1);

 gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file 라는 오류 발생시..


ini_set('gd.jpeg_ignore_warning', true);

를 PHP파일 상단에 넣어준다. 임시방편이지만 썸네일 생성이 죽어버리는걸 막아준다..

+ Recent posts