많이 쓰이는 Regex 예제들

박진현·2021년 7월 21일
0

function fn_hangulChk(obj) {

 var val = obj.value;

 var pattern = /[^가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9]/gi;

  // 특수문자 체크

  // 한글도 제거하고 싶다면 가-힣ㄱ-ㅎㅏ-ㅣ  조건 제거.. 이런 형태로 원하는 것 체크

 

 if (pattern.test(val)) {

  obj.value = val.replace(pattern, "");

 }

}

참고..

모든 공백 체크 정규식
var regExp = /\s/g;

숫자만 체크 정규식
var regExp = /^[0-9]+$/;

이메일 체크 정규식
var regExp = /^0-9a-zA-Z@0-9a-zA-Z.[a-zA-Z]{2,3}$/i;

핸드폰번호 정규식
var regExp = /^\d{3}-\d{3,4}-\d{4}$/;

일반 전화번호 정규식
var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;

아이디나 비밀번호 정규식
var regExp = /^[a-z0-9_]{4,20}$/;

휴대폰번호 체크 정규식
var regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;

############## 정규표현식

  1. 확장문자 (: backslash)

    • s : 공백 문자(스페이스, 탭, 폼 피드, 라인 피드)

    • b : 단어의 경계

    • B 이를 제외한 모든 문자 매칭

    • d : 숫자

    • D : 숫자가 아닌 문자 [^0-9] 와 동일

    • w : 알파벳, 숫자로 된 문자, 밑줄 기호(_) [A-Za-z0-9]

    • W : w의 반대 문자 [^A-Za-z0-9]

    • 특수문자 : 특수문자 자체를 의미 예) + (+ 기호 자체)

  2. 특수문자

      • : 0회 이상 반복
      • : 1회 이상 반복
    • ? : 0 또는 1개의 문자 매칭
    • . : 정확히 1개 문자 매칭
  3. 플래그

    • g : 전역매칭
    • i : 대소문자 무시
    • m : 여러 줄 매칭
  4. 기타

    • () : 괄호로 묶인 패턴은 매칭된 다음, 그 부분을 기억한다.
    • $1,...,$9 : 괄호로 갭처한 부분 문자열이 저장 됨.
    • | : ~또는~
    • {} : 반복 횟수

############## 간단한 정규 표현식
var re = /a/ --a 가 있는 문자열
var re = /a/i --a 가 있는 문자열, 대소문자 구분 안함
var re = /apple/ -- apple가 있는 문자열
var re = /[a-z]/ -- a~z 사이의 모든 문자
var re = /[a-zA-Z0-9]/ -- a~z, A~Z 0~9 사이의 모든 문자
var re = /[a-z]|[0-9]/ -- a~z 혹은 0~9사이의 문자
var re = /a|b|c/ -- a 혹은 b 혹은 c인 문자
var re = /[^a-z]/ -- a~z까지의 문자가 아닌 문자("^" 부정)
var re = /^[a-z]/ -- 문자의 처음이 a~z로 시작되는 문장
var re = /[a-z]$/ -- 문자가 a~z로 끝남

상기에 정의된 간단한 표현식을 아래에 넣어 직접 해 보시기 바랍니다.
var str = "sample string";
re.test(str)?"true":"false";

  • 특수문자('''', ''^'', ''$'', ''*'', ''+'', ''?'', ''.'', ''('', '')'', ''|'', ''{'', ''}'', ''['', '']'')를 검색할 경우는 '''' 를 넣는다.

############## 간단한 응용예제

var re = /s/;공백체크varre=/ss/; -- 공백체크 var re = /^ss*/; -- 공백문자 개행문자만 입력 거절
var re = /^[-!#$%& amp;'*+./0-9=?A-Z^_a-z{|}~]+@[-!#$%&'*+/0-9=?A-Z^_a-z{|}~]+.[-!#$%& amp;'*+./0-9=?A-Z^_a-z{|}~]+/;이메일체크varre=/[AZaz09]4,10/; --이메일 체크 var re = /^[A-Za-z0-9]{4,10}/ -- 비밀번호,아이디체크 영문,숫자만허용, 4~10자리
var re = new RegExp("(http|https|ftp|telnet|news|irc)://([-/.a-zA-Z0-9_~#%$?&=:200-377()]+)","gi") -- 홈페이지 체크

var re = "<[^<|>]>"; -- 태그제거
var re = /[<][^>]
[>]/gi;-- 태그제거
str = str.replace(RegExpTag,"");

var RegExpJS = "<script[^>]>(.?)"; -- 스크립트 제거
str = str.replace(RegExpJS,"");

var RegExpCSS = "<style[^>]>(.?)"; -- 스타일 제거
str = str.replace(RegExpCSS,"");

var RegExpHG = "(/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/)"; -- 한글 제거
str = str.replace(RegExpHG,"");

var RegExpDS = //g; -- 주석 제거
str6 = str.replace(RegExpDS,"");

var regExp = /[a-z0-9]{2,}@[a-z0-9-]{2,}.[a-z0-9]{2,}/i; --이메일 체크

기타 응용

re = new RegExp("^@[a-zA-Z0-9]+s+","i");//문장의 처음이 @이고 문자가 1나 이상 있으면 ok

기타 상기와 동일하나 약간씩 다른 샘픔
영숫자 조합책크
if ((new RegExp(/[^a-z|^0-9]/gi)).test(frm.loginid.value)) {
alert("ID는 영숫자 조합만 사용하세요");
frm.loginid.focus();
}

홈페이지 주소 책크
function chk(v){
str='';
re = new RegExp("^http://","i");
re.test(v)?str='y':str='n';
alert(str);
}

hanmail인지를 책크
function chk(v){
str='';
re = new RegExp("hanmail.net","i");
re.test(v)?str=true:str=false;
return str
}

//본문내에서 도메인 구하기
var patt = /(http(s)?://)?w+(.w+)+/gi;
var result = (aa.value.match(patt));

//본문내에서 url구하기
상기와 유사 var patt = /(http(s)?://)?w+(.w+).S*-gi;

########### 정규식 메소드 및 사용법

참조 http://eknote.tistory.com/1251
참조 http://www.javascriptkit.com/javatutors/redev3.shtml
RegExp.exec(string)
RegExp.test(string)
String.match(pattern)
String.search(pattern)
String.replace(pattern,string)
String.split(pattern)

  • 특수문자 검증 및 제거

function regExp(){
//특수문자 검증 start
var str = "2011-12-27";
var regExp = /[{}[]\/?.,;:|)*~`!^-_+<>@#$%&\\=(\'\"]/gi
if(regExp.test(str)){
//특수문자 제거
var t = str.replace(regExp, "")
alert("특수문자를 제거했습니다. ==>" + t)
}else{
alert("정상적인 문자입니다. ==>" + str)
}
//특수문자 검증 end
}

  • 닉네임 체크 - 특문 제외 2자 ~ 20자

var pattern = /^[\w\Wㄱ-ㅎㅏ-ㅣ가-힣]{2,20}$/;

[\w]는 [A-Za-z0-9_] 이다
[\W]는 \w를 제외한 특수문자들이다.
[ㄱ-ㅎ] 은 ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ
[ㅏ-ㅣ]는 ㅏㅑㅓㅕㅗㅛㅜㅠㅡㅣ
[가-힣]는 가나다라~~타파하 ~ 기니디리~ 티피히 ~ 각낙닥락 ~ 틱픽힉 ~ 깋닣딯맇 ~ 팋핗힣 이 된다.

즉 그냥 모든 문자열에 대한 {2,20} 글자 수 체크가 된다.


var pattern = 정규식;
var testee = "테스트 스트링";
var true_or_false = pattern.test( testee); // 정규식 필터를 통과하면 true, 아니면 false 리턴.

다른 방법들도 있는데 나는 그냥 위와 같이 사용중이다.
아래는 내가 사용하는 정규식 몇 가지 예제..

1) 정수와 소수점 달고다니는 수들만 통과시키는 필터. 예를 들어 '12' '12.123' '-0.571' '-8100' 등에 대해 true를 리턴하고 나머지는 false 리턴.

var pattern = /^[-]?\d+(?:[.]\d+)?$/;
return pattern.test( testee);

1-2) 위의 필터에서 좀더 조건을 추가해서, 양수면서 최대 소수점 2자리 이하까지만 통과시키는 필터. 예를 들어 12.23, 0.41, 51 등에는 true를 리턴하고, -12, -9.43, 1.234 등에는 false를 리턴하는 필터.
var pattern = /^\d+(?:[.]?[\d]?[\d])?$/;
return pattern.test( testee);

2) 숫자 및 x, X, P, E 만 포함한 스트링만 통과시키는 필터.
예를 들어,
x123 : true
XPE : true
125 : true
1234O : false
pXP : false

var pattern = /[^1234567890xXPE]/;
return !(pattern.test( testee));

3) 문자 전체에서 특수문자를 하나라도 포함하지 않아야만 함
예를 들어,
@123 : false
12Hello5 : true
!!! : false

var pattern = /[^\w\s]/i;
return !(pattern.test( testee));

4) 다음과 같은 형식만 통과함. Q로 시작하면서, 0000~9999 까지의 숫자만 Q 뒤에 달고 있어야 함.
즉,
Q0001, Q0002, Q1234, Q9999 : true
Q00, Q194, Q1 : false
Q0001A : false
QUESTION : false

var pattern = /^Q[0-9][0-9][0-9][0-9]$/;
return pattern.test( testee);

5) 정규식에서 g 플래그를 쓸 때 주의해야 한다. 최근에 매칭한 곳에서부터 다시 정규식 검사를 시작하는 속성이 있다.

이것때문에 다음 문제가 일어난다. 연속적으로 한 스트링에 대해 정규식 테스팅을 하면, 처음에는 필터가 잘 동작하다가 나중에는 통과하지 말아야 할 조건을 가진 스트링이 정규식 패턴을 통과했다고 나오게 된다. 구글에서 'regex g flag consecutive' 등으로 검색하면 이 문제로 매우 많은 질문과 답이 나온다. 해결 방법은.. 난 g 플래그 대신 i 플래그를 줘서 해결했다. 아래 링크도 도움이 될 것이다.

http://stackoverflow.com/questions/15610251/why-pattern-testname-opposite-results-on-consecutive-calls
http://stackoverflow.com/questions/6739136/consecutive-calls-to-regexp-test-fail-for-pattern-with-global-option

6) 문자열 양 끝에 공백문자를 없애 주는 정규식. 예를 들어 " hi hello! "; 를 "hi hello!"; 로 바꿔 주는 코드.
(출처 : http://stackoverflow.com/questions/3000649/trim-spaces-from-start-and-end-of-string)

function trim_whitespace( str)
{
return str.replace(/^\s\s/, '').replace(/\s\s$/, '');
}

7) "[192.244.1.123]" 같은 string에서 안의 ip부분만 빼낸다("192.244.1.123" 을 빼내는 작업)
function main()
{
var regex = /[([.\d]+)]/;
var str = "[192.244.1.123]";
var res = regex.exec( str);

// print res[1] = "192.244.1.123";

}
[출처][Javascript] 정규식을 이용한 특수문자, 한글 등 특정 문자 체크(제거)|작성자 realuv


리액트에서 사용할땐 아래 참고
https://ddeck.tistory.com/42

이메일 검사 정규표현식 : /^[\w-]+(.[\w-]+)@([\w-]+.)+[a-zA-Z]+$/; 이거 test@test.c 해도 통과되니까
/^(([^<>()[]\.,;:\s@"]+(.[^<>()[]\.,;:\s@"]+)
)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/;
이걸로 하기

profile
👨🏻‍💻 호기심이 많고 에러를 좋아하는 프론트엔드 개발자 박진현 입니다.

0개의 댓글