JS 정규표현식, 유효성 검사

Jieun·2023년 2월 24일

📝 계산기만들기, 이벤트, 정규표현식 후 세미프로젝트 작업
#230224

📌 정규 표현식(Regular Expression)

특정한 규칙을 가진 문자열 집합을 표현하는데 사용하는 형식 언어.

정규 표현식을 이용하면
입력된 문자열에 대한 특정 조건 검색, 일치 여부 판단, 치환에 대한
조건문을 간단히 처리할 수 있다


✔️ 정규표현식 참고 사이트

1. 작성한 정규표현식을 그림으로 나타내주는 사이트
https://regexper.com/

2.정규표현식 테스트 사이트(실무에서 제일 많이 씀)
https://regexr.com/

3.정규표현식 설명 - MDN
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions

💻 regExr 홈페이지 보는법

빨간색 박스 안에 정규표현식을 작성
파란색 박스 안에 원하는 결과값을 작성
노란색 박스에서 맞는 정규표현식이면 match, 틀리면 No match로 표시됨.


🏷️정규 표현식 객체 생성 및 확인하기

1. 정규 표현식 객체 생성 방법

1) const regExp = new RegExp("정규표현식");

2) const regExp = /정규표현식/;
→ `양쪽 '/' 기호 정규 표현식 리터럴 표기법

2. 문자열 패턴 확인 메서드(함수)

1) regExp.test(문자열)
→ 문자열에 정규표현식과 일치하는 패턴이 있을 경우 true, 없으면 false

2) regExp.exec(문자열)
→ 문자열에 정규 표현식과 일치하는 패턴이 있을경우
처음 매칭되는 문자열을 반환, 없으면 null 반환

<button id="check1">확인하기(콘솔)</button>
// 콘솔창에서 확인하기!
-----------------------------------------------------------
document.getElementById("check1").addEventListener("click", function() {

    // 정규표현식 객체 생성
    const regEx1 = new RegExp("script");
    // "script"와 일치하는 문자열이 있는지 검사하는 정규식 객체

    const regEx2 = /java/;
    // "java"와 일치하는 문자열이 있는지 검사하는 정규식 객체
 

    const str1 = "저희는 지금 javascript를 공부하고 있습니다.";

    const str2 = "java, db, html, css, js 를 사용 중 입니다."

    const str3 = "aaaaaajava, java, java";
  
   // 확인하기
    console.log("regEx1.test(str1) : " + regEx1.test(str1));
   //정규표현식 에서 str1에 script라는 문자가 있어서 true라고 출력됨
  	console.log("regEx1.exec(str1) : " + regEx1.exec(str1));
    // 정규표현식에서 str1에 script라는 처음매칭되는 문자열(script)을 반환  
    console.log("regEx1.test(str2) : " + regEx1.test(str2));
    // script없어서 결과값 false
    console.log("regEx1.exec(str2) : " + regEx1.exec(str2));
    // script 없어서 결과값 null
  	console.log("regEx2.test(str2) : " + regEx2.test(str2));
    //ture
    console.log("regEx2.exec(str2) : " + regEx2.exec(str2));
    //java
    console.log("regEx2.test(str3) : " + regEx2.test(str3));
    //ture
    console.log("regEx2.exec(str3) : " + regEx2.exec(str3));
    //java

🏷️ 정규 표현식의 메타 문자

문자열의 패턴을 나타내는 문자
문자마다 지정된 특별한 뜻이 담겨있다.

✔️ 정규 표현식의 메타문자 종류

a(일반문자열) : 문자열 내에 a라는 문자열이 존재하는지 검색
(a말고 b,c,d 다 됨)

[abcd] : 문자열 내에 a,b,c,d 중 하나라도 일치하는 문자가 있는지 검색
^(캐럿) : 문자열의 시작을 의미
$(달러) : 문자열의 끝을 의미

\w (word, 단어) : 아무 글자(단, 띄어쓰기, 특수문자, 한글 X)
\d (digit, 숫자) : 아무 숫자(0~9 중 하나)
\s (space, 공간) : 아무 공백 문자(띄어쓰기, 엔터, 탭 등)

[0-9] : 0부터 9까지 모든 숫자
[ㄱ-힣] : ㄱ부터 힣까지 모든 한글(자음, 모음, 자+모음, + 받침)
[가-힣] : 자음, 모음만 작성되는 경우를 제외한 한글

[a-z] : 모든 영어 소문자
[A-Z] : 모든 영어 대문자

💻 특수문자의 경우 각각을 입력하는 방법밖에 없음
단, 메타문자와 중복되는 특수문자는
앞에 \(백슬래시)를 추가하여 탈출 문자(Escape)로 만들어 사용


<수량 관련 메타 문자>

a{5} : a문자가 5개 존재 === aaaaa
a{2,5} : a가 2개 이상 5개 이하 == aa, aaa, aaaa, aaaaa
a{2,} : a가 2개 이상
a{,5} : a가 5개 이하

* : 0개 이상 == 0번 이상 반복 == 있어도 되고, 없어도 되고...
+ : 1개 이상 == 1번 이상 반복
? : 0개 또는 1개
. : 1칸 (개행문자 제외한 문자 하나)

<button id="check2">확인하기</button>
<div class="area" id="div1"></div>
-----------------------------------------------------------------
document.getElementById("check2").addEventListener("click", function() {

// 결과 출력용 div
const div1 = document.getElementById("div1");

//div1.innerHTML = "";
  
 // [abcd] : 문자열 내에 a,b,c,d 중 하나라도 일치하는 문자가 있는지 검색
 const regEx1 = /[abcd]/;

 div1.innerHTML += "/[abcd]/ , apple : " + regEx1.test("apple") + "<hr>";
 div1.innerHTML += "/[abcd]/ , apple : " + regEx1.test("apple") + "<hr>";

 // ^(캐럿) : 문자열의 시작을 의미
 const regEx2 = /^group/;
 div1.innerHTML += "/^group/ , group100 : " + regEx2.test("group100") + "<hr>";
 div1.innerHTML += "/^group/ , 100group : " + regEx2.test("100group") + "<hr>";

 // ^[abcd] : 문자열이 a,b,c,d 중 하나로 시작하는지 검색
 const regEx3 = /^[abcd]/;
 div1.innerHTML += "/^[abcd]/ , group : " + regEx3.test("group") + "<hr>";
 div1.innerHTML += "/^[abcd]/ , car : " + regEx3.test("car") + "<hr>";
 div1.innerHTML += "/^[abcd]/ , dark : " + regEx3.test("dark") + "<hr>";

 // $(달러) : 문자열의 끝을 의미
 const regEx4 = /team$/;
 div1.innerHTML += "/[team$]/ , A-team : " + regEx4.test("A-team") + "<hr>";
 div1.innerHTML += "/[team$]/ , team-A : " + regEx4.test("A-team") + "<hr>";

 //^[a-zA-Z0-9]$

📌 이름 유효성 검사

이 내용을 활용해서 회원가입 ID/비밀번호 만들 수 있습니다🤗🤗🤗

  • 한글 2글자 이상 6글자 이하의 문자열
  • 단 자음/모음 경우는 제외
  • 유효한 경우 초록색 글씨로 "유효한 이름 형식입니다" 출력
  • 유효하지 않은 경우 빨간색 글씨로 "잘못된 형식입니다." 출력
이름 : <input type="text" id="inputName">
<span id = "result1" class="confirm">결과</span>
----------------------------------------------------------------------
document.getElementById("inputName").addEventListener("keyup", function() {

    // 한글 2글자 이상 6자 이하 문자열
    const regEx = /^[가-힣]{2,6}$/;

    const result1 = document.getElementById("result1");

    // 요소.classList : 요소가 가지고 있는 클래스를 배열로 반환
    // 요소.classList.remove("클래스명") : 요소의 특정 클래스 제거
    // 요소.classList.add("클래스명") : 요소의 특정 클래스 추가
    // 요소.classList.toggle("클래스명") : 클래스가 있으면 제거 없으면 추가


    if(regEx.test(this.value)) {
        result1.innerText = "유효한 형식 입니다."

        result1.classList.add("cofirm");
        result1.classList.remove("error");

    } else {
        result1.innerText = "잘못된 형식 입니다."
        result1.classList.add("error");
        result1.classList.remove("confirm");
    }
})
  
profile
👩‍💼👩‍💼➡️➡️➡️👩‍💻👩‍💻 생산자의 삶을 살기 위해 개발공부중

0개의 댓글