한글오타수정

http://www.phpschool.com/link/tipntech/55742

영문으로 한글을 쳤을때 변환하는 용도입니다.

심심해서 만들어봤습니다.

검색 엔진에서 쓰던데 소스를 안봐서 같은 방식인지는 모르겠네요.

원리는 간단합니다.

초성 중성 종성 별로 영어 오타값을 만들고, 조합을 고려해서 한글 변화시의 한글문자로 변환합니다.

한글 자소 분리해보신 분이면 바로 아실 겁니다. (원리 자체는 아주 쉽습니다.)

# Caps Lock는 off된 상태, 즉 쌍자음이나 연모음이 영대문자입니다. ex) Tkdna : 싸움 # 단자음이나 단모음은 한글로 변환하지 않습니다. # 정확한 오타(?)일 경우에만 정확하게 변환됩니다.

@ php의 array_search 가 있다면 굳이 오브젝트로 할 필요 없을텐데… 퍼포먼스 상 패턴을 고정시키고 오브젝트로 만들었습니다.

링크로 간단한 테스트를 걸어놨습니다.

<script type="text/javascript"> 
var e2k = (function() { 
var en_h = "rRseEfaqQtTdwWczxvg"; 
var reg_h = "[" + en_h + "]"; 
 
var en_b = {k:0,o:1,i:2,O:3,j:4,p:5,u:6,P:7,h:8,hk:9,ho:10,hl:11,y:12,n:13,nj:14,np:15,nl:16,b:17,m:18,ml:19,l:20}; 
var reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l"; 
 
var en_f = {"":0,r:1,R:2,rt:3,s:4,sw:5,sg:6,e:7,f:8,fr:9,fa:10,fq:11,ft:12,fx:13,fv:14,fg:15,a:16,q:17,qt:18,t:19,T:20,d:21,w:22,c:23,z:24,x:25,v:26,g:27}; 
var reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|"; 
 
var reg_exp = new RegExp("("+reg_h+")("+reg_b+")(("+reg_f+")(?=("+reg_h+")("+reg_b+"))|("+reg_f+"))","g"); 
 
var replace = function(str,h,b,f) { 
return String.fromCharCode(en_h.indexOf(h) * 588 + en_b[b] * 28 + en_f[f] + 44032); 
}; 
 
return (function(str) { 
return str.replace(reg_exp,replace); 
}); 
})(); 
 
 
// Test 
alert(e2k("rkwl dksgdms rlf - fhqjxm vmfhtmxm")); 
 
</script> 



 #assign(@arr, array('string key': 'value', 'string key 2': 'value'))

# reg_match()   array   pattern, subject
# http://wiki.sk89q.com/wiki/CommandHelper/Staged/API/reg_match_all

#@en_h = "rRseEfaqQtTdwWczxvg"
@en_h = array(r:0,R:1,s:2,e:3,E:4,f:5,a:6,q:7,Q:8,t:9,T:10,d:11,w:12,W:13,c:14,z:15,x:16,v:17,g:18)
@reg_h = "[" + en_h + "]"

# http://wiki.sk89q.com/wiki/CommandHelper/Staged/Arrays
@en_b = array(k:0,o:1,i:2,O:3,j:4,p:5,u:6,P:7,h:8,hk:9,ho:10,hl:11,y:12,n:13,nj:14,np:15,nl:16,b:17,m:18,ml:19,l:20)
@reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l"
@en_f = array("":0,r:1,R:2,rt:3,s:4,sw:5,sg:6,e:7,f:8,fr:9,fa:10,fq:11,ft:12,fx:13,fv:14,fg:15,a:16,q:17,qt:18,t:19,T:20,d:21,w:22,c:23,z:24,x:25,v:26,g:27)
@reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|"

@reg_exp = "("+reg_h+")("+reg_b+")(("+reg_f+")(?=("+reg_h+")("+reg_b+"))|("+reg_f+"))","g"

proc( str, @h, @b,@f, 
  return char_from_unicode( en_h[h] * 588 + en_b[b] * 28 + en_f[f] + 44032 )
)

#<script type="text/javascript"> 
#var e2k = (function() { 
#var en_h = "rRseEfaqQtTdwWczxvg"; 
#var reg_h = "[" + en_h + "]"; 

#var en_b = {k:0,o:1,i:2,O:3,j:4,p:5,u:6,P:7,h:8,hk:9,ho:10,hl:11,y:12,n:13,nj:14,np:15,nl:16,b:17,m:18,ml:19,l:20}; 
#var reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l"; 

#var en_f = {"":0,r:1,R:2,rt:3,s:4,sw:5,sg:6,e:7,f:8,fr:9,fa:10,fq:11,ft:12,fx:13,fv:14,fg:15,a:16,q:17,qt:18,t:19,T:20,d:21,w:22,c:23,z:24,x:25,v:26,g:27}; 
#var reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|"; 

#var reg_exp = new RegExp("("+reg_h+")("+reg_b+")(("+reg_f+")(?=("+reg_h+")("+reg_b+"))|("+reg_f+"))","g"); 

#var replace = function(str,h,b,f) { 
#return String.fromCharCode(en_h.indexOf(h) * 588 + en_b[b] * 28 + en_f[f] + 44032); 
#}; 

#return (function(str) { 
#return str.replace(reg_exp,replace); 
#}); 
#})(); 


#// Test 
#alert(e2k("rkwl dksgdms rlf - fhqjxm vmfhtmxm")); 
#</script>