SAP/ABAP

ABAP 정규표현식을 사용한 사번체크

그녀는애교쟁이 2014. 7. 24. 15:40
반응형

프로그램을 개발하는 도중에 사번을 체크 할 일이 생겼다. 사번이 특별한 형태로 이루어져 있기 때문에 어떻게 쉽게 체크 할 수 없을까 고민 끝에 정규표현식을 사용해 보기로 했다. 기존에 웹 개발을 했을 때도 가끔 사용하기도 했는데 이게 생각보다 간단한것 같지만 이해도 잘 안돼서 망한 경우도 많이 있었다. ㅎㅎ 


오늘의 사번 형태는 AB + 숫자 6자리인 형태인 사번을 체크하는 로직이다.  앞에 AB 는 "AB로 시작하는" 의 의미이다. 그리고 [0-9] 는 "0~9 사이의 숫자가 들어 올 수 있다는" 의미이고 {6} 은 "6자리를 의미"한다. 간단하게 예제소스를 돌려보면 abap_true 값인  'X' 값이 출력 되는 것을 알 수 있다. 


REPORT ytest_regex.

DATA : lr_matcher     TYPE REF TO cl_abap_matcher,
       v_success      TYPE abap_bool,
       v_pattern(200) TYPE c,
       p_account(8)   TYPE c.

p_account = 'AB123456'.

CLEAR v_success.

CONCATENATE 'AB[0-9]{6}$' '' INTO v_pattern.

lr_matcher = cl_abap_matcher=>create(
                     pattern = v_pattern text = p_account ).

CALL METHOD lr_matcher->match
  RECEIVING
    success = v_success.

IF v_success = abap_true.

ENDIF.

WRITE : v_success.



이건 진짜 간단하게 작성해 본 코드이다. 하지만 이런식으로 확장해 나간다면 좀 더 복잡한 내용을 정규표현식으로 간단하게 Validation 을 체크 할 수 있다. ( 예를 들자면 이메일형식, 전화번호, 주민등록번호 등등 )


아래는 위키피디아에 나온 정규표현식의 기본 문법이다. ( 링크 )


기능

설명

.

  문자

  1개의 문자와 일치한다. 단일행 모드에서는 새줄 문자를 제외한다.

\

  이스케이프

  특수 문자를 식에 문자 자체로 포함한다.

¦

  선택

  여러 식 중에서 하나를 선택한다. 예를 들어, "abc¦adc"는 abc와 adc 문자열을 

  모두 포함한다.

^

  부정

  문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd,

  cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 

  않는 모든 문자를 의미한다.

[]

  문자 클래스

  "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 

  예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 

  지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 

  하나를 의미한다.

()

  하위식

  여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다.

*

  0회 이상

  0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.

+

  1회 이상

  "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.

 ?

  0 또는 1회

  "a?b"는 "b", "ab"를 포함한다.

{m}

  m회

  "a{3}b"는 "aaab"만 포함한다.

{m,}

  m회 이상

  "a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다.

{m, n}

  m회 이상 n회 이하

  "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다.


ABAP 은 정규표현식을 사용하기 위한 cl_abap_matcher 클래스를 사용하는데 위에 사용한 것은 Matching 이 됐는지 안됐는지 정도의 간단한 내용이지만 꽤나 강력하게 사용 할 수 있을 것 같다. 클래스를 더 분석해서 자료를 정리하여 포스팅 해봐야겠다. 


- 끗 -