###質問したいこと:ユーザーの入力した値が全角の数値である場合に半角に変換する関数を実装したいのですが関数が動作しません。
JavaScriptで入力された値が全角の数字の場合、半角に変換する機能を以下のような簡単な関数で実装しました。
が、該当箇所の関数が動作しません。(それ以外の箇所は意図した通りに動作します。)
*今回質問したい箇所は下記のコードの1~6行目までです。
JavaScript
1//今回質問したい箇所は1~6行目までです。 2//guessFieldはHTMLの入力フォームの参照の入った変数で、この変数のvalueがユーザーの入力した数値となります。 3function checkGuess(){ 4 var userGuess = guessField.value.replace(/[\uff10-\uff19]/g, 5 function autoModHalf(){ 6 return String.fromCharCode(guessField.value.charCodeAt(0) - 0xFEE0); 7 } 8 ); 9 //valueの値はどんな値を入れてもまずString型となっているのでNumber()でNumber型にしている。 10 userGuess = Number(userGuess); 11 if(Number.isInteger(userGuess)){ 12 if(guessCount === 1){ 13 guesses.textContent = "前回の予想: "; 14 } 15 guesses.textContent += userGuess + " "; 16 17 if(userGuess === randomNumber){ 18 lastResult.textContent = "おめでとう!正解です!"; 19 lastResult.style.backgroundColor = "green"; 20 lowOrHi.textContent = ""; 21 setGameOver(); 22 }else if(guessCount === 10){ 23 lastResult.textContent = "!!!ゲームオーバー!!!"; 24 setGameOver(); 25 }else{ 26 lastResult.textContent = "間違いです!"; 27 lastResult.style.backgroundColor = "red"; 28 if(userGuess < randomNumber){ 29 lowOrHi.textContent = "今の予想は小さすぎです!もっと大きな数字です。"; 30 }else if(userGuess > randomNumber){ 31 lowOrHi.textContent = "今の予想は大きすぎです!もっと小さな数字です。" 32 } 33 } 34 guessCount++; 35 guessField.value =""; 36 guessField.focus(); 37 } 38 else{ 39 alert("整数値を入力してください。"); 40 guessField.value = ""; 41 guessField.focus(); 42 } 43 } 44 function setGameOver(){ 45 guessField.disabled = true; 46 guessSubmit.disabled = true; 47 resetButton = document.createElement("button"); 48 resetButton.textContent = "リセット"; 49 document.body.appendChild(resetButton); 50 resetButton.addEventListener("click",resetGame); 51 } 52 function resetGame(){ 53 guessCount = 1; 54 var resetParas = document.querySelectorAll(".resultParas p"); 55 for(var i = 0;i < resetParas.length;i++){ 56 resetParas[i].textContent = ""; 57 } 58 resetButton.parentNode.removeChild(resetButton); 59 60 guessField.disabled = false; 61 guessSubmit.disabled = false; 62 guessField.value = ""; 63 guessField.focus(); 64 65 lastResult.style.backgroundColor = "white"; 66 67 randomNumber = Math.floor(Math.random() * 100) + 1; 68 } 69 guessSubmit.addEventListener("click",checkGuess); 70 </script>
###試したこと 正規表現の変更
/[\uff10-\uff19]/gを/[!-\uff5e]/gに変更しました。すると33や44のような十の位と一の位の数が同じような全角の数値は問題なく半角数字に変換されたのですが、32や91のような全角数字は半角の33や99に変換されてしまいました。この原因もよく理解できません。。。
###参考サイト
######JavaScript MDN
[このサイトに記載の数当てゲームのスクリプトを変更して上記のコードを作成しました。]
https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/A_first_splash
######Webllica
[ここの文字コードを参考に正規表現のコードを作成しました。]
https://webllica.com/change-double-byte-to-half-width/
###環境
Mac OS Mojave version 10.14.6
ChromeBrowser
VScode
回答2件
あなたの回答
tips
プレビュー