본문 바로가기
Spring/JavaScript+Jsp(HTMl)

[ javaScript ( js ) ] 정규식을 이용한 마스킹 처리(가리기) & 정규 표현식 & replace() & repeat()

by snow_hong 2022. 3. 12.

개발을 하다보면 개인정보 보호를 위해서 어떠한 값에 마스킹을 하는 경우가 필요합니다.

그럴 경우 정규식을 이용하여 마스킹이 가능합니다.

[ Java ]

String name ="java";
name = name.replaceAll("(?(<=.{1}).","*");
==> 결과 : j***

 

[ JavaScript ]

var name = '홍길동';
 var phone = '01012345678';
 var address = '서울시 강남구 테헤란로';
 var result = '';
    
     //맨앞글자 빼고 마스킹
     result = name.replace(/(?<=.{1})./gi,"*");
 ===> 결과 : 홍**
   
   // /gi앞에 .을 뺐을 경우
    result = name.replace(/(?<=.{1})/gi,"*");
===> 결과 : 홍*길*동*
    area6.innerHTML +="정규식 : " + result + "<br>"; 

   // 두번째 글자 마스킹
    result = name.replace(/(?<=.{1})./,"*");
===> 결과 : 홍*동

    // 뒤에 4자리 빼고 마스킹(replace)
    result = phone.replace(/\d(?=\d{4})/gi,"*");
===> 결과 : *******5678

    // 뒤에 4자리 빼고 마스킹(repeat)
    result = "*".repeat(phone.length -4) + phone.slice(-4);
===> 결과 : *******5678

    // 앞글자 3자리 빼고 마스킹
    result = phone.replace(/(?<=.{3})./gi,"*");
===> 결과 : 010******** 

 // for문으로 마스킹
   var len = name.length;
   var name_for = name[0];
           
     for(var i = 1; i<len; i++){
        name_for += '*';
     }
===> 결과 : 홍**

//공백 뒤 모두제거
  result = address.replace(/\s.*/gi,"");
  ===> 결과 : 서울특별시

[ 정규 표현식 ]

/ = 시작과 끝을 의미한다.

< 플래그 문자 > -> /~~/다음에 있는 내용들

플래그 문자는 정규표현식 뒤에 표현 ex. var regExp = /a/gi;

- g : 대상 문자열 내에 모든 패턴들을 검색하는 것(전체를 비교함)

- i : 대소문자를 가리지 않고 비교

- m : 여러줄의 검사 수행

< 앵커문자 >

문자열의 앞과 뒤를 구분해주는 정규표현식 기호

- ^ : 시작하는 단어

- $ : 단어의 끝부분

- ? : 존재 여부를 표현, 문자가 존재할 수도 존재하지 않을 수 있음을 의미

< 메타문자 >

자바스크립트 정규표현식 객체가 갖는 유용한 기능

- / [ ] / - []안에 있는 모든문자

ex) /[a-z]/g ==> 소문자 영어를 찾음

/[0-9]/g ==> 숫자를 찾음

- / [^ ] / - ^은 부정의 의미로 []안에 있는 내용빼고 모두

- \d : 숫자

/[0-9]/g 랑 같은 의미

- \w : 아무 단어(숫자포함)

- \s : 공백문자(탭, 띄어쓰기, 줄바꿈)

- \D : 숫자가 아닌 것

- \W : 단어가 아닌 것

- \S : 공백문자가 아닌 것

< 수량문자 > a부분에 메타문자가 들어가도 가능하다.

- a+ : a가 적어도 1개 이상

- a* : a가 0개 또는 여러개

- a? : a가 0개 또는 1개

- a{5} : a가 5개(5번째에 있는 부분)

- a{2,5} : a가 2~5개

- a{2, } : a가 2개 이상

- a{ ,2} : a가 2개 이하


[ replace() 메서드 ]

- 어떤 패턴에 일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환한다.

- var newStr = str.replace( 정규식 or String값, 교체할 문자 or문자열); => js

- String newStr = str.replace( 찾을 문자 or 문자열, 교체할 문자 or문자열); => java

[ repeat() 메서드 ]

- 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.

- str.repeat(count); //음수는 에러

ex ) 'abc'.repeat(2); ==> abcabc

'abc'.repeat(1.5) ==> abc //소수를 넣을 경우는 내림해서 정수값을 넣음,

'abc'.repeat(1/0) ==> error

[ replaceAll() 메서드 - js에서는 사용X ]

- 문자열에서 특정 문자를 다른문자로 전체 치환하는 메소드

- java에서는 정규식으로 문자열을 치환하고 싶으면 replaceAll()메서드를 사용해야한다.

- 정규식이 아닌 문자를 입력하였을때에는 replace()메소드와 같은 기능을 가지고 있는다.

- String newStr = str.replace( 찾을 문자열 or 정규식, 교체할 문자 or문자열); => java

//java
// replaceAll() 과 replace의 차이점
// 점(.)은 정규식으로 모든 문자를 표현한다.

        String  str = "안녕하세요. 테스트입니다.";
        str = str.replace(".", "^^");
        System.out.println(str); // 결과 : 안녕하세요^^ 테스트입니다^^

        String str2 = "안녕하세요. 테스트입니다.";
        str2 = str2.replaceAll(".", "^^"); 
        System.out.println(str2); // 결과 : ^^^^^^^^^^^^^^^^^^^^^^^^^^
728x90

댓글