下に示しました html を実行すると
■表示されるテキストボックスに、半角で 123 と入力すると、123 と出力されます。
これは期待通りの動作です。
■全角で 123 と入力すると、112123 と出力されます。
全角入力で確定していない文字列が取込まれる印象を持ちました。
コンソールのログは以下の通りでした。
全角1を入力する
s1= 1
s2= 1
引き続いて、全角2を入力する
s1= 112
s2= 112
引き続いて、全角3を入力する
s1= 112123
s2= 112123
★質問内容は、
全角で 123 と入力した時に、どうして半角で 123 と入力した時とは異なる振る舞いになるのか?
になります。よろしくお願い致します。
実行環境
windows10 google chrome
html
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>文字列置換</title> 6 </head> 7 <body> 8 <p>入力</p> 9 <input id="text1" type="text"/> 10 11 <script type="text/javascript"> 12 document.getElementById("text1").addEventListener("input", function(e) { 13 // 入力 14 const s1 = e.currentTarget.value 15 console.log("s1=", s1) 16 17 // 全角英数字 → 半角英数字 に変換する 18 const s2 = s1.replace(/[A-Za-z0-9]/g, (v) => { 19 return String.fromCharCode(v.charCodeAt(0) - 0xFEE0) 20 }) 21 console.log("s2=", s2) 22 23 // 出力 24 document.getElementById("text1").value = s2 25 }) 26 </script> 27 </body> 28</html>