Pront/Javascript

[javascript] 정규식

soyeonisgood 2022. 9. 27. 23:04

RegExp 객체

  • 정규 표현식을 구현한 자바스크립트 표준 내장 객체
  • 형식: var 변수 = new RegExp(pattern [, flags])
  • (1) 리터럴 방식
    •  p = /ab+c/i;   // 파라미터에 따옴표 사용하면 안된다
  • (2) 생성자 방식
    •  p = new RegExp('ab+c', 'i');  // 파라미터에 따옴표 사용해야한다
  // 리터럴 방식
 p = /ab+c/i; // i:대소문자 구분 안함. +:앞문자 1자 이상
 s = 'xy abc 12';
 console.log(p.test(s)); // true
 s = 'xy ab 12';
 console.log(p.test(s)); // false
 
  // 생성자 방식
 p = new RegExp('ab+c', 'i');
 s = 'xy Abbc 12';
 console.log(p.test(s)); // true

 


 

RegExp.prototype.test()

  • 대상 문자열 속에 일치하는 문자열이 포함된 경우 true, 그렇지 않으면 false 반환
  • 형식: regexObj.test(str)

 

RegExp.prototype.test() 활용 예제

p = /a.s/;
s = 'abs';
console.log( p.test(s)); // true
// /a.s/.test('abs')

 

RegExp.prototype.replace()

  • 특정 패턴에 일치하는 부분 또는 모든 부분을 교체하여 새로운 문자열 반환. 패턴은 문자열이나 정규식이 될 수 있고, 교체 문자열은 문자열이나 호출된 함수일 수 있다.
  • 형식: str.replace(regexp|substr, newSubStr|function)

 

RegExp.prototype.replace() 활용 예제

  • g: 전체 문자열 검색. 해당되는 모든 문자열 교체
s = "web 자바 jsp 자바 html";

p = /자바/;
// 자바 -> java 로 고치기
a = s.replace(p, 'java'); // 치환
console.log(a); // web java jsp 자바 html

p = /자바/g;
//자바 -> java 로 고치기
a = s.replace(p, 'java'); // 치환
console.log(a); // web java jsp java html

 

 


정규식 패턴 예제

.

  • 한 문자
p = /a.s/;
s = 'abs';
console.log( p.test(s)); // true
s = 'as';
console.log( p.test(s)); // false

 

x*

  • 앞 문자 x와 0개 이상 일치. 앞문자 x가 없거나 한 개 이상 가능. x{0, } 와 동일
p = /test a*b/;
s = 'test aab';
console.log( p.test(s)); // true
s = 'test b';
console.log( p.test(s)); // true
s = 'test ax';
console.log( p.test(s)); // false
s = 'user aab';
console.log( p.test(s)); // true

 

.*

  • 0개 이상 모든 문자

^

  • ~로 시작
p = /^자바.*/; // 자바로 시작
s = '자바 사랑';
console.log( p.test(s)); // true
s = '이자바';
console.log( p.test(s)); // false

$

  • ~로 끝남
p = /.*자바$/; // 자바로 끝
s = '자바 사랑';
console.log( p.test(s)); // false
s = '이자바';
console.log( p.test(s)); // true

// 자바로 시작하고 웹으로 끝나는 모든 문자
// p = /^자바.*웹$/;
p = /^자바(.*)웹$/;
s = '자바 스프링 서블릿';
console.log( p.test(s)); // false
s = '자바 스프링 웹';
console.log( p.test(s)); // true

 

\d  또는  [0-9]

  • 숫자
// x{2} : x가 2개, x{2, 5} : x가 2~5개, x{2,} : x가 2개 이상
// 한자리 숫자
// p = /^\d{1}$/;
p = /^[0-9]{1}$/;
s='7';
console.log( p.test(s)); // true
s='75';
console.log( p.test(s)); // false

// 한 자 이상 숫자
p = /^\d+$/;
// p = /^\d{1,}$/;
// p = /^[0-9]{1,}$/;
s='0.7';
console.log( p.test(s)); // true
s='75';
console.log( p.test(s)); // true

// 1~3자 숫자
p = /^\d{1,3}$/;

// 한자이상의 숫자, 부호 및 소수점도 가능
// x? : 앞문자 0개 또는 1개(x{0,1}와 일치)
p = /^[+-]?\d+(\.?\d*)$/;
s='-1.2';
console.log( p.test(s)); // true
s='0.245';
console.log( p.test(s)); // true
s='19.2';
console.log( p.test(s)); // true

\D

  • 숫자 제외. 숫자가 포함되지 않으면 true.
p = /^(\D)+$/;
// p = /^\D+$/;
s='a7';
console.log( p.test(s)); // false
s='75a';
console.log( p.test(s)); // false
s='a75a';
console.log( p.test(s)); // false
s='aa';
console.log( p.test(s)); // true

 

[a-zA-Z0-9]  또는 /^[a-z0-9]+$/i

  • 영숫자. 대소문자 포함.
// 1자 이상의 영숫자
// p = /^[a-zA-Z0-9]+$/; 
p = /^[a-z0-9]+$/i; 

// 1자 이상의 영숫자와 _
p = /^\w+$/;

 

\s

  • 공백(탭 포함)
// 영문자와 공백
p = /^[a-z\s]+$/i; 
s = 'a b';
console.log( p.test(s)); // true
s = 'a 1';
console.log( p.test(s)); // false

 

x(?=y)

  • x 다음에 y가 오는 경우에만 x와 일치
  • /abc(?=xyz)/ : 'abc' 다음에 'xyz'가 오는 경우에만 true
  • /ab(?=12|34) : 'ab' 다음에 '12' 또는 '34' 가 오는 경우에만 true
// 영문자로 시작하고 영숫자와 _ 가능
p = /^(?=[a-z])(\w)*$/i;
s = 'a';
console.log( p.test(s)); // true
s = '1a';
console.log( p.test(s)); // false
s = 'a1';
console.log( p.test(s)); // true

 

  • or (또는)
// 자바, 웹, java, web 존재 여부
p = /(자바|웹|java|web)/i; 
// p = /(?=자바|웹|java|web)/i; 
// p = /.*(?=자바|웹|java|web).*/i; 
s = '자바 스프링 서블릿';
console.log( p.test(s)); // true
s = '스프링';
console.log( p.test(s)); // false

 

가-힣  또는  \uac00 ~ \ud7a3

  • 한글
// 1자 이상의 한글만 가능
// p = /^[가-힣]+$/;
p = /^[\uac00-\ud7a3]+$/;

 

 

이미지 파일

  • 확장자 확인
p = /(\.gif|\.jpg|\.jpeg|\.png)$/i;

 

5~10자 문자, 영문자와 하나 이상의 숫자 또는 특수문자 포함

p = /^(?=.*?[a-z])(?=.*?[#?!@$ %^&*-]|.*[0-9]).{5,10}$/i;

 

 

5~10자 문자, 영문자로 시작하고 하나 이상의 숫자 포함

p =/^[a-zA-Z]+[a-zA-Z0-9]{4,9}$/;

 

2~5자 한글

p = /^[가-힣]{2,5}$/;

 

 

기호 → 특수문자

function symbolHtml(content) {
	if(! content ) return content;
	
	content = content.replace(/</g, '&lt;');
	content = content.replace(/>/g, '&gt;');
	content = content.replace(/\"/g, '&quot;');
	content = content.replace(/\'/g, '&#39;');
	content = content.replace(/\(/g, '&#40;');
	content = content.replace(/\)/g, '&#41;');
	
	return content;
}

 

 

특수문자 → 기호

function restoreHtml(content) {
	if(! content ) return content;
	
	content = content.replace(/&lt;/g, '<');
	content = content.replace(/&gt;/g, '>');
	content = content.replace(/&#40;/g, '(');
	content = content.replace(/&#41;/g, ')');
	content = content.replace(/&quot;/g, '"');
	content = content.replace(/&#39;/g, '\'');
	
	return content;	
}