devtools

정규식 테스터

입력값 검증 정규식이 뭘 통과시키고 뭘 거르는지 확인하고, 조건을 골라 정규식을 만들고, 긴 텍스트에서 찾고 바꿉니다.

예시
검사할 정규식/…/i, Java 문자열 "…", 본문만 — 어떤 형태로 붙여넣어도 됩니다
플래그 없음
이 정규식이 허용하는 문자
  • •영문 소문자 a–z U+0061–U+007A
  • •영문 대문자 A–Z U+0041–U+005A
  • •숫자 0–9 U+0030–U+0039
  • •한글 완성형 가–힣 (11,172자) U+AC00–U+D7A3
  • •한글 호환 자모 ㄱ–ㆎ (키보드로 치는 낱자 ㄱ ㅏ 등) U+3130–U+318F
  • •한글 조합형 자모 (맥 파일명 같은 NFD 한글) U+1100–U+11FF
  • •낱개 문자· 가운뎃점• 불릿‧ 하이픈 점 공백~!@#$%^&*()-+[]
길이 제한 없음 (빈 값도 통과)
입력해 보기
✕ 걸림7자
건모_닉네임!
  • ✕ 허용 안 되는 문자 _ U+005F
허용 안 되는 글자를 지우면 — value.replace(/[^a-zA-Z0-9\uAC00-\uD7A3\u3130-\u318F\u1100-\u11FF\u00B7\u2022\u2027 ~!@#$%^&*()\-+\[\]]/g, "")
건모닉네임!
여러 값 한 번에 (한 줄에 하나)통과 4 / 걸림 3
✓건모123
✕gunmo_dev허용 안 됨: _
✓ㄱㄴㄷ
✓닉네임·별명
✕이모지😀허용 안 됨: 😀
✕a/b허용 안 됨: /
✓[운영자]

사용법

  1. 검증 테스트 — 폼 검증에 쓰는 정규식(/^[가-힣a-z]*$/ 같은)을 붙여넣고 값을 입력하면 통과 여부와 걸린 글자, 길이·포함 조건 중 뭐가 틀렸는지 보여줍니다. 허용 문자 목록은 \uAC00 같은 코드도 사람 말로 풀어줍니다.
  2. '입력 막기'를 켜면 onChange에서 글자를 지우는 필터를 그대로 체험할 수 있고, 여러 값을 줄마다 넣어 한 번에 검사할 수도 있습니다.
  3. 정규식 만들기 — 허용할 문자·길이·필수 포함 조건을 고르거나 휴대폰·이메일 같은 형식을 고르면 정규식과 JS/Java 검사·필터 코드가 나옵니다.
  4. 찾기·치환 — 로그나 텍스트에서 매칭을 하이라이트하고 캡처 그룹, 치환 결과, Java Pattern 코드를 확인합니다.

자주 쓰는 문법

문법의미예
\d / \D숫자 / 숫자가 아닌 것\d{3} → 123
\w / \W영문·숫자·_ / 그 외\w+ → user_01
\s / \S공백(스페이스·탭·줄바꿈) / 그 외a\sb → a b
.줄바꿈을 제외한 아무 문자 (s 플래그면 줄바꿈 포함)a.c → abc, a1c
[abc] / [^abc]괄호 안의 문자 하나 / 그 외[가-힣]+ → 한글
* + ?0번 이상 / 1번 이상 / 0~1번colou?r → color, colour
{n} {n,} {n,m}정확히 n번 / n번 이상 / n~m번\d{2,4}
*? +?게으른(최소) 반복<.+?> → 태그 하나씩
^ $시작 / 끝 (m 플래그면 줄마다)^\d+$ → 숫자만인 줄
\b단어 경계\bcat\b → cat (category는 X)
( )캡처 그룹 → $1, $2(\d+)-(\d+)
(?: )캡처하지 않는 그룹(?:ab)+
(?<name> )이름 그룹 → $<name>(?<year>\d{4})
a|b또는jpg|png
(?= ) (?! )전방 탐색 / 부정 전방 탐색\d+(?=원) → 1000원의 1000
(?<= ) (?<! )후방 탐색 / 부정 후방 탐색(?<=\$)\d+ → $50의 50

JavaScript와 Java의 차이

항목JavaScriptJava
문자열 안 역슬래시/\d+/ 그대로"\\d+" 두 번
플래그/abc/giPattern.CASE_INSENSITIVE 등 상수
전체 검색g 플래그while (matcher.find())
이름 그룹 참조(치환)$<name>${name}
소유 수량자 a*+, 원자 그룹 (?>)지원 안 함 (문법 오류)지원
\A \Z (입력 시작/끝)지원 안 함지원
matches() 전체 일치^...$ 로 직접matcher.matches()

자주 묻는 질문

Q.어떤 정규식 문법을 쓰나요?

브라우저의 JavaScript 정규식(ECMAScript)으로 실행합니다. 대부분의 문법은 Java와 같지만 몇 가지가 다릅니다. 아래 'JavaScript와 Java의 차이' 표를 참고하세요.

Q.Java 코드에 넣으려면 역슬래시를 두 번 써야 하잖아요.

아래 Java 코드 영역이 \d → \\d 처럼 자동으로 이스케이프한 문자열과 Pattern.compile 코드를 만들어 줍니다. 반대로 Java 소스에 있던 "\\d+" 를 그대로 붙여넣고 싶으면 'Java 문자열로 입력'을 켜세요.

Q.페이지가 멈추지 않나요?

정규식은 별도 스레드(Web Worker)에서 실행하고, 1초 안에 끝나지 않으면 강제로 중단합니다. (a+)+$ 같은 중첩 반복은 입력이 조금만 길어도 계산량이 기하급수적으로 늘어나는데(재앙적 역추적), 서버에서 쓰면 ReDoS 공격 대상이 되니 이 경고가 뜨면 패턴을 고치는 게 좋습니다.

Q.입력한 내용이 서버로 전송되나요?

아니요. 모든 계산은 브라우저 안에서 이루어지고, 마지막 입력값만 이 브라우저의 localStorage에 저장해 다음에 다시 열었을 때 복원합니다.

Q.g 플래그를 끄면 왜 하나만 나오나요?

g(global)가 없으면 정규식은 첫 번째 매칭에서 멈춥니다. 치환도 첫 번째만 바뀝니다. Java로 치면 g가 있으면 while(matcher.find()) / replaceAll, 없으면 if(matcher.find()) / replaceFirst에 해당합니다.

로그에서 쿼리를 뽑았다면 MyBatis 로그 → SQL로 파라미터까지 채워보세요.

Gunmo Lee