이번에 영문문서대응 작업때문에 로마숫자의 점검용 코드를 줃었다.;;;(머리싸매서 하는것도 좋지만 시간대비 효용이..)

로마숫자에 대한 개요는 이걸 참조하고..

Roman Alternative Arabic Notes
없음 없음 0 0을 표시할 수 없음.
I 1  
II ⅠⅠ (or Ⅱ) 2  
III ⅠⅠⅠ (or Ⅲ) 3  
IV ⅠⅤ (or Ⅳ) 4 시계 문자판 등에서는 IIII (ⅠⅠⅠⅠ)이 쓰임.
V 5  
VI ⅤⅠ (or Ⅵ) 6  
VII ⅤⅠⅠ (or Ⅶ) 7  
VIII ⅤⅠⅠⅠ (or Ⅷ) 8  
IX ⅠⅩ (or Ⅸ) 9  
X 10  
XI ⅩⅠ (or Ⅺ) 11  
XII ⅩⅠⅠ (or Ⅻ) 12  
XIII ⅩⅠⅠⅠ 13  
XIV ⅩⅠⅤ 14  
XV ⅩⅤ 15  
XIX ⅩⅠⅩ 19  
XX ⅩⅩ 20  
XXX ⅩⅩⅩ 30  
XL ⅩⅬ 40  
L 50  
LX ⅬⅩ 60  
LXX ⅬⅩⅩ 70  
LXXX ⅬⅩⅩⅩ 80  
XC ⅩⅭ 90  
C 100 미국의 100달러 지폐를 "C-bill"이나 "C-note"라고 부르는 연유이다.
CC ⅭⅭ 200  
CD ⅭⅮ 400  
D 500 IↃ또는 1000 표기의 절반이란 의미에서 유래.
DCLXVI ⅮⅭⅬⅩⅤⅠ 666 짐승의 수에는 M 이외의 다른 모든 기본 부호가 한번씩 나타난다.
CM ⅭⅯ 900  
M 1000 예전엔 ↀ을 쓰기도 했다.
MCMXLV ⅯⅭⅯⅩⅬⅤ 1945  
MCMXCIX ⅯⅭⅯⅩⅭⅠⅩ 1999 IMM (ⅠⅯⅯ)이나 MIM (ⅯⅠⅯ)으로 줄여서 쓸 수 없다.
MM ⅯⅯ 2000  
MMM ⅯⅯⅯ 3000  
ⅠↃↃ 5000 I 뒤에 C를 두번 거꾸로 쓴 모양.

이 모든걸 점검할 수 있는 식이
^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
이다.

위의 코드중 특수문자에서 대응되는 범위는 1-10까지이다.
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ (일본어 비스타 폰트는 12까지 지원)
시간나면 컨버터도 만들어야겠다..

참고자료 :

http://ko.wikipedia.org/wiki/%EB%A1%9C%EB%A7%88_%EC%88%AB%EC%9E%90
http://diveintopython.org/regular_expressions/roman_numerals.html
http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
http://www.crowes-nest.com/CrowesNest/Library/RomanConv/roman.html
http://www.csharphelp.com/archives/archive144.html

AND