[MFC] 정규식을 이용한 이메일 주소 검증 방법

2013. 8. 8. 14:34기타/Windows 개발

아쉽게도 MFC는 요즘 많이 쓰는 언어들처럼 직접 정규식을 이용할 수 있는 방법이 없다.

그래서 알아보니 이런 저런 라이브러리들이 당연하게도(!!) 존재하고 있었다.

http://soiwa.net/20

가장 쓸만하다는 "boost" 라이브러리는 웹 사이트가 접속이 되지 않는다.

http://breadlab.net/226


그래서 그나마 괜찮아보인다는 "Fast regular expressions"을 사용해보았다.

http://www.codeproject.com/Articles/798/Fast-regular-expressions

소스 파일 2개와 헤더파일 2개를 프로젝트에 추가해주고, 사용하고자 하는 부분에서 다음과 같이 사용하면 된다.

계속 결과가 제대로 안나와서 정규식을 파싱하는 부분이 문제인가 했는데, CString을 const char*으로 캐스팅하는 부분이 문제였다.

MFC 프로그래밍을 하면서 늘 느끼는 것이지만, 꽤나 오랫동안 써왔기에 이제는 익숙해질 때도 되었다고 생각되는데도 여전히 이러한 문제 때문에 고생을 하게 만든다.

요즘 누가 타입 캐스팅 때문에 뻘짓을 하고 있단 말이냐!

다른 언어들 처럼 스트링이라면 그냥 스트링이면 되지 않겠니!

스트링의 종류가 뭐 이리 많고, 복잡하냔 말이다!


#include "RexInterface.h"

REXI_Search rexs;

REXI_DefErr err;

const int ncOk= REXI_DefErr::eNoErr;

err = rexs.SetRegexp("[a-zA-Z0-9_\\-\\.]+@[a-zA-Z0-9\\.\\-]+\\.[a-zA-Z]"); 

assert(err.eErrCode==ncOk);

char *pTemp = (char*)malloc(strMailAddress.GetLength());

sprintf(pTemp, "%S", strMailAddress);

const char* pCur = pTemp;

int             nMatchLen;

bool            bEosFound= false;

if (rexs.Find(pCur,nMatchLen,bEosFound))

{

AfxMessageBox(_T("Match!"));

}

free(pTemp);