우리나라에서 만든 PDA 셀빅 이후 HP 4700을 거쳐 이제 블랙잭에 이르렀다. 그동안 별개 PDA를 사용하면서 유난히 게으른 성격때문에 좀 편해볼려고 사용하기 시작했던 PDA가 나를 더 복잡하게 만들었었는데.. 이제야 깔끔하게 정리된 느낌이다. PC에서는 OUTLOOK, 이동중에는 블랙잭.... 케이블만 연결하면 바로바로 동기화가 되니 이제 백업만 열심히 하면 되는거다.. ㅎㅎ
예전에 뉴스그룹에 올렸던 내용을 옮겨 놓습니다.. 뉴스그룹에서 의견교환시 FAQ 대용으로 활용하기 위해서..
주민등록번호, 전화번호, 우편번호, 이메일주소, IP 주소, 숫자만 입력을 받아야 하는 경우 등등 문자열을 입력받아 이를 점검해야 하는 경우가 많이 있습니다.. 뭐.. 자주 쓸 것이니 이것만 입력 받도록 해주는 에디트 컨트롤을 만드는 것도 방법이겠습니다만.. 이런 경우 저런 경우 변종에 변종.. 컴포넌트 만드는 것도 쉬운일이 아닙니다..
이제 앞으로 이런 검사들은 모두 정규표현식을 사용해 검사를 하는게 어떨까 하는 생각이 듭니다.. 아울러 검색, 치환 등에도 탁월한 편리함을 제공하죠..
이미 많은 웹 개발자들은 적극 활용을 하고 있더군요..
그도 그럴 것이 VBScript와 자바 스크립트에서는 정규표현식을 지원하는 완벽한 기능을 제공합니다.. 아주 사용하기 편리하기 때문에 별로 걱정할게 없죠..
function autolink_function(str)
dim reg
set reg = New RegExp
reg.pattern =
"(http|ftp):\/\/([a-z0-9\_\-\./~@?=%&:\-]+)"
reg.Global = True
reg.IgnoreCase = True
str = reg.Replace(str,
"<a href='$1://$2' target=new>$1://$2</a>")
위의 코드는 HTML 문서, 혹은 문자열을 뒤벼서 http나 ftp 주소, 혹은 이메일 주소에 하이퍼링크 태그를 달아주는 함수입니다.. 파싱할 필요도 없고, 문자열 검색할 필요도 없습니다.. 치환함수에 정규표현식을 넣어주면 그 문자열 패턴에 맞는 문자열들은 알아서 지가 찾아 다 변환시켜주는 것을 볼 수 있습니다.. 정말 환상입니다..
우왕.. 절라 편해보이는데.. C++에서는 어케 사용을 해야할까요.. 안타깝게도 MFC나 C++ 표준 라이브러리에는 정규표현식을 지원하는게 없습니다..
음.. 절라 억울합니다.. 하지만, 이 좋은 것을 알고서는 가만 앉아 있을 수만은 없습니다.. 그럼요.. 전세계에 이런 좋은 것을 알고 가만 있지 못하는 C++ 프로그래머가 최소한 몇명은 있을 것이고.. 최소 그중 한명은 웹에 자신의 클래스를 공개했을 겁니다.. 찾아봅시다..
열심히 코드그루나 코드프로젝트 사이트를 찾아보니, 이게 가장 괜찮은거 같더군요.. 하지만 아래 설명할 boost 라이브러리 가지고 삽질 하느라 테스트는 못해봤습니다.. 시간 나시는 분 함 점검 해봐주시길.. 괜찮은지 어떤지..
http://www.codeproject.com/cpp/rexsearch.asp?target=regular%7Cexpression
두둥.. 언제나 진짜는 가장 마지막에 등장하는 법..
여기 아주 막강한 boost 라이브러리의 RegEx++ 이라는 클래스가 있습니다..
boost 라는 라이브러리는 C++ 표준 라이브러리에 자신의 라이브러리를 포함시키길 희망했으나 결국 표준에 채택되지 못하자 이에 불만을 품은 프로그래머들이 차기 표준에 채택될 것을 원하며 따로 모여 만들고 있는 라이브러리인데.. 그중 RegEx++ 이라는 클래스가 정규표현식을 지원한다기에 좀 테스트를 해봤습니다..
사용해본 결과.. 음.. 정말 막강합니다.. 검색에, 치환, 유닉스의 막강한 grep 기능까지.. (사실 grep이 막강한건 정규표현식을 지원하기 때문이죠..) 정규표현식을 사용한 웬만한 문자열 조작은 다 가능하겠더군요.. 게다 많은 사람들이 개발하고 테스트에 참여해 검증도 어느정도 된 상태구요.. 성능도 높이기 위해 많은 노력을 했다고 합니다..
사용법은 다음 링크를 참조하시고.. http://www.codeproject.com/string/Regex__.asp
적용된 예는 맨 아래 소스코드를 참조하세요.. 정말 사용하기 간편하더군요.. 세팅하는게 좀 귀찮아서 그렇지.. (사실 크게 귀찮은 것도 아닙니다..) 그리고 VC++ 6에서 아주 잘 컴파일되고 동작합니다.. (흐흐.. VC++ 6이 워낙에 C++ 표준을 제대로 지원을 못한다는 악명이 높아서리.. 헐헐헐..) 다만.. 좀 아픔이 있습니다.. 무려 500K 짜리 DLL을 같이 배포를 해야 하네요..
하지만, 또 다른 방법이 있습니다.. 인터넷이 왜 좋겠습니까.. 무수한 사람들이 자신이 삽질해 만들어놓은 정규표현식을 고맙게도 이렇게 한데 다 모아두고 있습니다.. 그냥 찾아서 사용하면 됩니다.. 국내에서만 의미가 있는 우편번호, 전화번호, 주민등록번호 이런것두 있으면 좋을텐데.. 아래의 소스코드는 모두 이곳에서 가져온 정규표현식으로 테스트를 해봤습니다.. http://www.regexlib.com/Default.aspx
//이메일 체크 함수
function CheckEmail(str)
{
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test(str)) { return true; }
else { return false; }
}
//회원ID 체크하는 함수
function CheckID(str)
{
for (i=0; i <= str.length -1 ; i++)
{
ch = str.substring(i,i+1);
if ((ch>='0' && ch<='9') || (ch>='a' && ch<='z') ||(ch>='A' && ch<='Z')) { return true; }
else { return false; }
}
}
// Object에 value가 숫자로만 되어있는지 체크한다.
function isDigit(obj)
{
inputStr = obj.value;
for( var i = 0 ; i < inputStr.length ; i++ )
{
var oneChar = inputStr.charAt(i)
if (oneChar < '0' || oneChar > '9') { return false; }
}
return true;
}
//주민등록번호 체크
var tmp = 0
var yy = frm.regnum1.value.substring(0,2)
var mm = frm.regnum1.value.substring(2,4)
var dd = frm.regnum1.value.substring(4,6)
var sex = frm.regnum2.value.substring(0,1)
if ((frm.regnum1.value.length != 6 ) || ( mm < 1 || mm > 16 || dd < 1) )
{
alert('잘못된 주민등록번호입니다.');
frm.regnum1.value=''
frm.regnum1.focus();
return;
}
if ((sex != 1 && sex !=2 && sex !=3 && sex !=4)|| (frm.regnum2.value.length != 7 ))
{
alert ('잘못된 주민등록번호입니다.');
frm.regnum2.value=''
frm.regnum2.focus();
return;
}
for (var i = 0; i <=5 ; i++)
tmp = tmp + ((i%8+2) * parseInt(frm.regnum1.value.substring(i,i+1)))
for (var i = 6; i <=11 ; i++)
tmp = tmp + ((i%8+2) * parseInt(frm.regnum2.value.substring(i-6,i-5)))
MySQL을 웹상에서 좀더 편하게 관리하게 해주는 툴.. phpMyAdmin
언제부터인가 없어서는 안될 툴이 되었다.
APM을 설치하고 반드시 설치...
그런데.. 얼마전 새로운사실을 알았다.
로그인창에서 아이디 mysql에 패스워드없이 로그인이 된다는 사실..
요상한거는 mysql 시스템계정에 패스워드를 분명히 설정했는데... 패스워드 없이 ...
디비버전 정도나 보이고 아무것도 할 수 없기는 하지만 그래도 왠지 깨림직한것이 ..
여하튼 해결방법은 /etc/passwd 파일내에 mysql계정부분에서 /bin/bash로 되어있는 쉘설정을 /sbin/nologin으로 바꾸면 된다..