JavaScript
[모던자바스크립트] RegExp 자주 사용하는 정규표현식
dev22
2024. 4. 13. 19:15
728x90
현재 프로젝트를 진행하면서 정규표현식의 사용을 발견하여 관련 내용을 공부하던 중에 정리해본다. 모던 자바스크립트를 최근 읽고 있는데 많은 도움이 되고 있다.
특정 단어로 시작하는지 검사
// url 프로토콜 검사
const http = "http://example.com";
const https = "https://example.com";
const testUrl = "httpss://example.com";
const regExp = /^https?:\/\//;
console.log(regExp.test(http)); // true
console.log(regExp.test(https)); // true
console.log(regExp.test(testUrl)); // false
특정 단어로 끝나는지 검사
const fileName1 = "index.html";
const fileName2 = "index.js";
const regExp = /html$/;
console.log(regExp.test(fileName1)); // true
console.log(regExp.test(fileName2)); // false
숫자로만 이루워진 문자열인지 검사
const target = "12345";
const regExp = /^\d+$/;
console.log(regExp.test(target)); // true
메일 주소 형식에 맞는지 검사
const emails = ["email@email.com", "email#email.com", "email@email.hack", "em<sricpt>@email.com"];
const regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-z]{2,3}$/;
emails.forEach((email) => console.log(regExp.test(email)));
// email@email.com => true
// email#email.com => false
// email@email.hack => false
// em<sricpt>@email.com => false
인터넷 메시지 형식(internet message format) 규약인 RFC 5322에 맞는 정교한 패턴 매칭이 필요할 경우, 더욱 복잡한 패턴 사용이 필요
const regExp =
/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
핸드폰 번호 형식에 맞는지 검사
- 전화번호 or 핸드폰의 자리수와 형식은 맞아도, 말도 안되는 지번 ( 예를들어, 87-XXXX-XXX )은 필터링하는 방법이 필요할 듯
const phoneNumbers = ["010-1234-5678", "02-1234-5678", "032-123-4567", "02-123-4567", "010:1234:5678"];
phoneNumbers.forEach((phoneNumber) => {
console.log(/^\d{2,3}-\d{3,4}-\d{4}$/.test(phoneNumber));
});
// 010-1234-5678 => true
// 02-1234-5678 => true
// 032-123-4567 => true
// 02-123-4567 => true
// 010:1234:5678 => false
특수 문자 포함 여부 검사
const target1 = "abc<123";
console.log(/[^A-Za-z0-9]/gi.test(target1)); // true
// 특수 문자 확인 시 제거하기 ( accessor method, 원본 데이터 변경 X )
console.log(target1.replace(/[^A-Za-z0-9]/gi, "")); // abc123
console.log(target1); // true