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, '<');
content = content.replace(/>/g, '>');
content = content.replace(/\"/g, '"');
content = content.replace(/\'/g, ''');
content = content.replace(/\(/g, '(');
content = content.replace(/\)/g, ')');
return content;
}
특수문자 → 기호
function restoreHtml(content) {
if(! content ) return content;
content = content.replace(/</g, '<');
content = content.replace(/>/g, '>');
content = content.replace(/(/g, '(');
content = content.replace(/)/g, ')');
content = content.replace(/"/g, '"');
content = content.replace(/'/g, '\'');
return content;
}