inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션

정규표현식 실습

해결된 질문

436

yoongdoo0819

작성한 질문수 9

0

안녕하세요 강사님.

 

정규표현식 실습 강의에서 궁금한 점이 있습니다.

 

한글만 가능하도록 정규표현식을 작성하는 것을 "^[가-힣]+$" 라고 말씀해주셨습니다.

 

궁금한 점은 "[가-힣]+" 라고 작성하면 한글 외의 글자가 들어와도 true라고 반환하는 케이스가 어느 경우인지 입니다.

 

"[가-힣]+" 라고 작성해도 띄어쓰기와 ""일때도 모두 false를 반환합니다.

 

즉, "^[가-힣]+$" 대신에 "[가-힣]+" 라고 할 경우 어떠한 케이스들을 걸러내지 못하는지 궁금합니다.

 

 

감사합니다.

spring-boot junit

답변 1

1

최주호

결론 부터 말씀드리면, 정규표현식은 서로 다르지만, matches 메서드 때문에 동일하게 보이는 것입니다.

 

  1. 정규표현식

  • ^[가-힣]+$: 이 패턴은 문자열의 시작(^)부터 끝($)까지 한글 문자(가-힣)로만 이루어져 있어야 합니다. 문자열 내에 다른 문자가 있으면 패턴에 일치하지 않습니다.

  • [가-힣]+: 이 패턴은 문자열에 한글 문자(가-힣)가 하나 이상 연속해서 나타나는 경우에 패턴에 일치합니다. 문자열 내에 다른 문자가 있어도, 한글 문자가 하나 이상 있으면 일치합니다.

  1. matches 메서드

    Pattern.matches() 메서드를 사용할 때, 두 패턴은 다른 결과를 반환할 수 있습니다.

    예를 들어, "안녕하세요abc"라는 문자열에 대해 테스트한다면:

    • ^[가-힣]+$ 패턴은 일치하지 않습니다. 왜냐하면 문자열이 영어 문자(abc)를 포함하고 있기 때문입니다.

    • [가-힣]+ 패턴은 Pattern.matches() 메서드와 함께 사용되면 일치하지 않습니다. 왜냐하면 Pattern.matches()는 전체 문자열이 패턴과 일치해야 true를 반환하기 때문입니다. 하지만, 다른 메서드를 사용하면 일치한다고 판단할 수 있습니다. 예를 들어, Matcher.find()를 사용하면 문자열 내에 한글 문자가 하나 이상 있으면 true를 반환합니다.

public class HelloTest {

    @Test
    public void ko_test(){
        String pattern = "^[가-힣]+$";
        String str = "안녕하세요abc";

        boolean result = Pattern.compile(pattern).matcher(str).find();
        System.out.println(result); // false
    }

    @Test
    public void ko2_test(){
        String pattern = "[가-힣]+";
        String str = "안녕하세요abc";

        boolean result = Pattern.compile(pattern).matcher(str).find();
        System.out.println(result); // true
    }
}
  1. 자바의 정규표현식 검사 라이브러리

    Validation 라이브러리는 주로 전체 문자열이 패턴과 완전히 일치하는지 검사하는 방식에 가깝습니다. 즉, Pattern.matches()와 유사한 방식으로 작동합니다.

import javax.validation.constraints.Pattern

 

요청/응답 DTO 관련 문의

0

170

2

안녕하세요 인증이 필요한 url을 위하여 /s를 붙이는것에 대해 질문있습니다.

0

161

1

validation aop사용에 대해서 질문있습니다.

0

245

2

Dummy 클래스 위치에 대한 질문

0

293

2

테스트 방식에 관해서 질문이 있어요

0

292

2

스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?

1

434

1

equals와 longValue 관련 질문드립니다

0

328

1

계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!

0

499

2

[정보공유] Hibernate 로그 작동 안하시는 분들!!

3

346

0

UserControllerTest 테스트 실패 문의

0

318

1

스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.

2

1106

1

import 오류

0

426

3

spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져

0

438

2

안녕하세요 로그엔 성공적으로 들어온것같습니다..

0

237

1

JwtAuthorizationfilter test mvc.performget 관련 질문입니다!

0

286

1

JwtAuthorizationfilter test mvc.performget 부

0

226

1

longValue() 질문

0

228

1

jwt 인가필터 규현및 등록

0

334

1

스프링부트 3버전

1

334

1

권한처리를 위한 세션강제주입

0

418

1

JwtVO 를 인터페이스로 만든 이유

0

359

1

계좌 조회 질문드립니다

0

229

1

DummyObject 에 대하여

0

308

2

DTO를 이너클래스로 계속추가하는 이유

0

695

2