(어느 게시판에 올릴까 하다가 만만한 자유게시판에...)

(쓸데없이 길기만 한 글...)

 

인터넷은 정보의 바다.

제로보드4를 처음 접했을 때도 하던 말인데 지금도 마찬가지네요.

 

개발자가 모든 것을 다 외우고 있을 필요가 없죠.

구글만 연결된다면.

물론 정보 자체가 구글 안에 있는 것은 아니지만요.

 

각설하고 본론으로 넘어가면 최근 사이트 하나를 만드는데 XE를 사용했어요.

XE를 사용한 이유는 예약+결제 기능이 필요해서요.

예약모듈을 구매해서 이용하기로 했었죠.

그래서 XE로 다 만들고 예약 부분만 하면 되는데.

예약모듈을 이용할수 없는 과정을 거쳐서 예약을 디자인해놨네요.

아놔. XE로 만들어 놓은 나머지 페이지를 다시 작업하기 귀찮아서 XE의 외부페이지를 처음으로 이용해봤습니다.

오호 사용해보니 괜찮더군요.

예약과 결제 기능은 깡으로 만들고 있네요. 어흑...ㅠㅠ

 

개인정보를 입력할 때 특정 양식(이메일이나 휴대폰 번호 등)을 강제하기 위해서 자바스크립트를 이용하기도 하는데요.

이때 정규식을 많이 이용하거든요.

정규식으로 특정한 양식을 만들고, 그것과 비교해서 참이면 넘어가고, 거짓이면 다시 작성하게 하는 거죠.

정규식을 직접 만들지 못해도 인터넷은 정보의 바다잖아요.

많이 쓰는 양식은 이미 많은 분들이 공유를 하고 있죠.

 

regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;

위는 휴대폰 번호 양식에 대한 정규식이에요.

정규식이 어려우신 분들을 위해서 중요한 부분 설명해보자면

01 => 글자 그대로 숫자이구요.

([0|1|6|7|8|9]?) => 이 전체가 한 글자를 의미하는데 | 가 or를 의미해서 0 또는 1 또는 6, 7, 8, 9 중 하나면 됩니다.

위 두줄을 합치면 010 또는 011 또는 016 또는 017 또는 018 또는 019가 되죠.

이것을 다르게 길게 써보면 

괄호등은 제외하고 적으면 010|011|016|017|018|019 이렇게 되요. 길죠.

정규식은 이렇게 길게 적어야만 한느 것을 짧게 적을 수 있게 해주는 것이라고 생각할 수 있어요.

 

[0-9]{3,4} 이 부분은 0~9에 해당하는 글자인 숫자만 3개 또는 4개라는 것을 의미해요.

 

그런데 여기서 문제가 생긴 것입니다.

XE에서는 중괄호 { } 를 변수를 감쌀 때 사용합니다.

(아마두요. XE문법은 잘 몰라서.. 아마 맞을꺼에요...)

자바스크립트 안에 들어가 있는 {}를 변수 취급하면서

외부페이지의 자바스크립트안에 들어간 [0-9]{3,4} 가 [0-9]3,4가 되어버립니다.

그러니 계속 거짓(false)가 뜨죠.

XE문법에 익숙했다면 금방 찾았을 텐데... 이것때문에 한참 해멨네요.

 

그래서 저부분을 변경했습니다.

regExp = /^01([0|1|6|7|8|9]?)-?([0-9][0-9][0-9][0-9])|([0-9][0-9][0-9])-?([0-9][0-9][0-9][0-9])$/;

더 길어졌죠. 숫자 3개 또는 4개를 풀어서 쓴거죠. ([0-9][0-9][0-9][0-9])|([0-9][0-9][0-9]) 이렇게요.

 

이렇게 바꿔줬더니 검증이 잘 되더군요.

하아..........

 

혹시라도 XE에서 외부페이지안에 자바스크립트 정규식을 사용하실때 저처럼 해매지 마시라고 글 남겨봅니다.

중괄호는 안되요!!!!

요 조건에 맞는 글이 구글에서 검색이 안되더라구요.

  • profile

    더블유님이 오랫만에 글 올려주셨네유.
    인터넷은 정보의 바다
    이 글이 눈에 띄네요.
    자바스크립트에 관한 더블유님 글이
    다른 사람들에겐 매우 유익하고 참고가 되고 
    좋은 정보가 될꺼라 생각해요.

  • profile profile
    전 다시 잠수모드로...ㅎ

    혹시 누군가 보고 저처럼 삽질하지 말라는 글이죠~
  • profile
    필요할경우 따로 JS파일을 불러와서 body, 혹은 해더에
    var regExp = "/^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/";
    으로 선언한다음 그 다음에 실행되는 구문에다 regExp 를 사용해도 되지 않던가용?
  • profile profile
    외부파일로는 되지만.... 귀찮아서 페이지 내에 넣었거든요.....ㅠㅠ
  • ?
    /^01([016-9])-?([0-9]+)-?([0-9]+)$/ 로 하고 match 된 것들의 length 를 검사해주는게 더 바람직해 보입니다
  • ? profile
    각 단계(?)별로 글자수를 확인할수 있다는 것인가요?
  • profile ?
    match로 하면 결과물이 배열로 반환되는데 거기서 각각 매치 (1번배열 2번배열 3번배열이 존재함. 0번은 전체인 번호가 들어가있죠)된 결과물의 길이를 체크해주시면 됩니다.
  • ? profile
    아하! 결과값 반환의 형식이 그렇군요!
    오늘도 하나 배웠습니다^^
    감사합니다~