2016년 11월 27일 일요일

4. PHP [Regular Expression]

Validation

Valdation이란 form의 value가 믿을만 한지 확인하는 것이다. 
예를 들어 프로그래머는 사용자가 핸드폰번호 입력 form 에다가 숫자를 입력하길 원하지 문자나 특수기호를 입력을 원하지 않는다. form에 입력할수 있는 string을 제어시키기 위해 Validation 작업을 하게 된다. 

form에 입력값을 제어 한다는 것은 또한 보안과 직결되는 문제인데 만약 악의적인 마음을 가진 사용자가 악성코드를 form을 통해 서버로 전송할 수도 있기 때문이다. form과 관련되서 더 많은 보안과 관련된 문제가 있지만 보안을 배우는게 이 chapter에 주요 목적이 아니므로 넘어가본다.

Validation은 server,client쪽 모두에서 가능하다.
  • client-side : form이 보내지기 전에 확인한다.
    • lead to a better user experience but not secure!

-> client-side validation





  • server-side: form이 보내진 후에 확인한다. (in PHP)
    • slow but security is ensured

-> server-side validation


그래서 두가지 모두 장단점이 있으므로 잘 섞어 쓰는 것이 중요하다. 이번 chater에서는 PHP안, 즉 server-side에서 form validation하는 방법을 배워본다.

Regular Expression

Regular Expression(regex) 이란 text의 패턴을 서술하는 것을 말한다.
Validation을 하는데 Regular Expression을 쓰는 이유는 Validation을 강력하게 할수 있다는 장점을 가진다. 하지만 사람이 읽기 어렵다는 단점이 있다.

Basic Regular Expression 
/abc/

  • regex는 시작과 끝이 / 으로 되어있다.
  • 위의 regex의 경우 abc로 시작하는 모든 문자열과 매칭시킨다.
    • YES: : "abc" , "abccc" ,"1234abc"
    • NO: "abd" , "abb" , "xlc" , "12355" , "ab c"
WildCards : .
WildCards란 . 을 말하는데 .이란 어떤 character, string이 와도 된다는 뜻이다. (except \n)
/.d.t/ 
  • YES: "idot" , "ddtt" , "dhhddppkkkkt"
/../i 에서 i는 대소문자를 구문하지 않겠다는 의미이다.
/mart/i

  • YES: "smart" , "MARty", "nMaRt"


Special characters:  |, () , ^ , \

| means OR

  • /abc|de|f/ matches only "abc" , "de" ,"f"
() means Grouping
  • /(kim|park) gija/ matches only "kim gija" , "park gija"
^ matches the beginning of a line $ the end

  • /^must this$/ matches only "must this"
\ starts an escape sequence
\ , / , ^ , + , () 이런 문자 들이 escape되므로 정규식에 쓰지 못하므로 정규식안에 문자로 쓰기 위해서 앞에다가 \를 붙혀준다

  • / 2\^3/ matches "2^3"

Quantifiers : * , + , ?
* means 0 or more occurences
  • /abc*/ matches "ab" , "abc" , "abcc" , "abcccc"
  • /a.*a/ matches "aa", "abba", "a!!kka" 
+ means 1 or more occurences
  • /a(bc)+/ matches "abc" , "abcbc" , "abcbcbc"
? means 0 or 1 occurences
  • /a(bc)?/ matches "a" or "abc"

More Quantifiers: {min, max}
{min, max} means between min and max occurences
  • /a (bc) {1,3} / matches "abc" , "abcbc" , "abcbcbc
  • /ab{2, }/ matches "abb", "abbb", "abbbbbbbbbb"
Character set: []
[] group characters into a character set
  • /[abc] art/ matches "aart" , "bart" , "cart"
  • /(a|b|c|)art/ 와 같다.

Character Range: [start-end]
character set [] 안에 '-'  문자를 통해 range를 정할수 있다.
  • /[a-z]/는 모든 소문자 알파벳 단어,문장 등을 쓸수있다.
  • /[a-zA-Z0-9]/ 문자나 숫자 모두 가능
character set [] 안에 ^는 안의 단어들을 거부하겠다는 의미
  • /[^abcd]/ 는 a,b,c,d가 들어가있지 않는 문자에만 matching됨

Escape sequences
  • \d 는 모든 숫자
  • \w 는 모든 숫자,문자 (same as /[a-zA-Z0-9]/)
  • \s 는 모든 whitespace character( like \t ,  , \n)
Regular expression in php 





preg_match 는 첫번째 인자인 정규식에 대해 2번째 인자 string이 matching되면  true 아니면 false를 반환한다. 
preg_replace는 preg_match와 같지만 정규식에 matching되는 string이 2번째 인자의 string으로 바뀐다는 것이 다르다.
preg_split(regex, string)은 정규 식에 맞는 string을 짤라 준다.









0 개의 댓글:

댓글 쓰기