본문 바로가기
뒷북 정리 (국비 교육)/javascript

[javascript] step08. regular expression

by 규글 2021. 12. 14.

step08. regular expression (정규 표현식)

<body>
    <h1>정규 표현식 (Regular Expression)</h1>
    <input type="text" id="inputID" placeholder="아이디 입력...">
    <p>첫글자는 영문 소문자로 시작, 특수문자는 허용하지 않음... 최소 5글자 최대 10글자</p>
    <button id="signupBtn">가입</button>
    <script>
        document.querySelector("#signupBtn").addEventListener("click", function(){
            // 1. 입력한 아이디 값을 읽어온다.
            let inputID = document.querySelector("#inputID").value;
            // 2. 아이디 유효성 검증
            let reg1 = /^[a-z][\w]{4,9}$/;
            // 3. 결과를 알리기(유효한지 여부에 따라 다른 동작하기)
            let isValid = reg1.test(inputId);
            if(isValid){

            } else{
                
            }

        })
    </script>
</body>

정규 표현식. regular expression이라고 한다. 어떤 언어를 사용하든 정규 표현식은 거의 유사하다고 말했다. 언어마다 조금씩 다르지만 javascript에서 정규 표현식은 '/' 로 감싸서 작성한다. 다른 text와 마찬가지로 정규 표현식으로 작성한 값을 변수에 담는 것은, 그 text 자체를 담는 것이 아니라 text의 참조값을 담게 된다. 또한 test(str) 함수를 통해 input 값과의 일치 여부를 확인할 수 있다.

 

  1. 영어 대소문자를 구분한다.
    (ex - Hello와 hello는 다르다.)
  2. space나 tab, 개행기호 같은 눈에 보이지 않는 내용까지도 일치해야 한다.
    (ex - 공백이 space bar를 통해 만들어진 것과 tab을 통해 만들어진 것은 다르다.)
  3. 특별한 의미를 가지고 있는 문자들이 있다.
    ^ : 매칭할 문자열의 시작을 의미한다.
    $ : 매칭할 문자열의 끝을 의미한다.
  4. 만약 특별한 의미를 가지는 문자열을 문자 그대로(literally) 사용하고 싶다면 앞에 '\'(역슬래쉬)를 붙여준다.
    (ex - $를 찾고 싶다면 '\$'라고 작성해야 한다.)
  5. '.'(point 점)은 모든 문자를 의미한다. (한 글자)
    이또한 literally한 .를 찾고 싶다면 \를 붙여준다.
  6. 대괄호 [  ]는 '문자 클래스'라고 한다. 안에는 매칭할 수 있는 문자의 목록을 넣는다. 순서는 중요하지 않다.
    (ex - [you] 는 y나 o나 u를 매칭한다.)
  7. 문자의 범위는 '-'(dash) 로 나타낼 수 있다. 범위를 표기하는 것이 아닌 -는 그냥 단순한 문자로 인식한다.
    (ex - [a-d], [A-K}, [2-7], 대문자를 찾는다면 [A-Z], 소문자는 [a-z], 숫자는[0-9], 한글은 [가-힁] 힁은 사전상 마지막)
  8. 문자 클래스 안에 첫 문자로 들어가는 ^는 시작을 의미하는 것이 아니라 not을 의미한다.
    (ex- [^abc] : abc가 아닌 한 글자)
  9. 문자열을 교차 매칭시키기 위해서는 소괄호 (  ) 안에 '|' 로 구분해서 나열한다.
    (ex - (Mon|Tues|Fri)day
  10. quantifiers(수량자) 라는 개념이 있다. 수량자는 문자가 몇 번 올 수 있는지를 정의한다.
    * : 0번 이상 (없어도 되고, 많아도 된다.)
    + : 1번 이상 (반드시 있어야하며, 많아도 된다.)
    ? : 0번 or 1번 (없어도 되고, 있다면 단 하나여야 한다.)
  11. 중괄호 {  } 는 정확한 문자의 반복 횟수를 정의한다.
    {m} : m번 반복.
    {m, n} : 최소 m번, 최대 n번 반복.
    {m, } : 최소 m번 반복. (그냥 최대 n번 반복인 { , n}은 없을까? -> 따로 없는 것 같다.)
    (ex - {0}은 *과 같다. {1, }는 +와 같다. {0, 1}은 ?와 같다.
  12. [0-9] 는 [\d] 와 같다. 이때 d는 decimal이라고 한다.
    이것과 반대되는 것은 [^\d] 이고, 이것은 [\D] 와 같다. (소문자와 대문자는 반대의 개념이라고 했다.)
  13. [a-zA-Z0-9] : 특수문자가 아닌 한 글자를 의미한다. 이것은 [\w]와 같다.
    이것과 반대되는 것은 [^a-zA-Z0-9]도 가능하고 [\W] 도 가능하다.

댓글