\r\n\t\r\n\r\n```\r\n\r\nあまりにも初心者なため意味の分からないことをしているかも知れませんが\r\n教えていただけるとありがたいです。","answerCount":3,"upvoteCount":0,"datePublished":"2019-02-27T02:37:33.243Z","dateModified":"2019-02-27T02:37:33.243Z","acceptedAnswer":{"@type":"Answer","text":"\"cん12345\"→”CN12345”の実現是非はともかく、\r\nこのコードでは**文字列を取得したものを変換をしているだけ**でどこにもセットしていないから何も起きていません。\r\nreturnしてもinputのvalueに返すわけではないですからね。\r\n下記のようにvalueにセットしてやる必要があります。\r\n```js\r\nfunction toHalfWidth(elm) {\r\n elm.value = elm.value.replace(/[A-Za-z0-9!-~]/g, function(s){\r\n return String.fromCharCode(s.charCodeAt(0)-0xFEE0);\r\n });\r\n}\r\n```","dateModified":"2019-02-27T02:53:20.112Z","datePublished":"2019-02-27T02:53:20.112Z","upvoteCount":5,"url":"https://teratail.com/questions/176675#reply-262931"},"suggestedAnswer":[{"@type":"Answer","text":"求められている回答とは違うのですが。\r\n\r\n求めている文字だけ入力可能にしてしまえば、変換しなくても済むと思います。\r\n```HTML\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n

大文字アルファベットか数字だけ

\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n```","dateModified":"2019-02-27T06:31:40.630Z","datePublished":"2019-02-27T05:16:07.603Z","upvoteCount":1,"url":"https://teratail.com/questions/176675#reply-262968","comment":[{"@type":"Comment","text":"ありがとうございます。\r\n大変勉強になりました。\r\nこのようなやり方もあるのですね。\r\n\r\n今回、社内の現場で作業されている方に向けてのもので\r\nパソコン操作等に慣れていない方が使われるので\r\nなるべくユーザーが何もしなくても良いようなものがしたかったので\r\nmts10806さんの回答を採用させていただきました。\r\n\r\nまた何か行き詰った際にお力添え頂ければと思います。\r\nありがとうございました。","datePublished":"2019-02-27T06:16:16.826Z","dateModified":"2019-02-27T06:16:16.826Z"},{"@type":"Comment","text":"全角入力しようとしたら警告を出すコードも追加しときました。\r\n\r\n> パソコン操作等に慣れていない方が使われるので\r\n私なら入力間違いがそもそも無いように持っていきます。\r\n- teratailの趣旨とは外れますが、バーコードスキャナーとか併用とか\r\n- 選択肢が少ないなら、選択してもらう\r\n\r\n社内の事情は分かりませんが、以下を気をつけてください。\r\n---\r\nmts10806さんのやり方を試してから考えて欲しいですが、\r\n> \"cん12345\"→”CN12345”の実現是非はともかく、\r\n’ん’は何も変換しません。正確には、アルファベットと数字だけ半角にして居るだけです。大文字にするとかはしてないですよ。\r\n\r\nconst input = \"あア亜1Aぁァa\";\r\nconst convert = input.replace(/[A-Za-z0-9!-~]/g, function (s) {\r\n console.log(`${s} > ${String.fromCharCode(s.charCodeAt(0) - 0xFEE0)}`);\r\n return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);\r\n})\r\nconsole.log( input); // あア亜1Aぁァa\r\nconsole.log(convert); // あア亜1Aぁァa","datePublished":"2019-02-27T07:12:08.157Z","dateModified":"2019-02-27T07:12:08.157Z"}]},{"@type":"Answer","text":"「ん」とかは煩雑になるのでやめたほうがいい\r\n```javascript\r\nvar str=\"Abc12345\";\r\nstr=str.replace(/[A-Za-z0-9]/g, function(s) {\r\n return String.fromCharCode(s.charCodeAt(0) - 65248);\r\n}).replace(/[a-z]/g, function(s) {\r\n return String.fromCharCode(s.charCodeAt(0) -32);\r\n});\r\n```\r\n※一部調整","dateModified":"2019-02-27T02:56:58.612Z","datePublished":"2019-02-27T02:53:13.393Z","upvoteCount":1,"url":"https://teratail.com/questions/176675#reply-262930","comment":[{"@type":"Comment","text":"ご回答ありがとうございます。\r\n今回、mts10806様の回答で解決しましたが\r\nこちらも参考にさせていただきます。\r\nありがとうございました。\r\nまたよろしくお願いいたします。","datePublished":"2019-02-27T06:21:57.872Z","dateModified":"2019-02-27T06:21:57.872Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/JavaScript","name":"JavaScriptに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/176675","name":"入力フォーム 全角→半角 自動変換"}}]}}}
質問するログイン新規登録

Q&A

解決済

3回答

11104閲覧

入力フォーム 全角→半角 自動変換

kitten

総合スコア25

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/02/27 02:37

0

0

前提・実現したいこと

入力フォームを外れた際に、自動で全角文字を半角文字に変換されるようにしたい。
尚且つ、同時に小文字を大文字に変換するようにもしたい。
例:bc12345⇒BC12345

また、可能であれば"cん12345"の様に平仮名が混ざってしまった場合でも
キーボードのF10の様にCN12345と変換してくれる様にしたい。

発生している問題・エラーメッセージ

こちらのサイトのソースを
そのまま使わせて貰い、以下のような簡単なフォームを作成し実行してみたのですが
変換されず困っています。

HTML

1<!DOCTYPE HTML> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>変換テスト</title> 6 </head> 7 <body> 8 <form> 9 <input type="text" name="text" maxlength="20" onblur="toHalfWidth(this)" /> 10 </form> 11 <script> 12 function toHalfWidth(elm) { 13 return elm.value.replace(/[A-Za-z0-9!-~]/g, function(s){ 14 return String.fromCharCode(s.charCodeAt(0)-0xFEE0); 15 }); 16} 17 </script> 18 </body> 19</html>

あまりにも初心者なため意味の分からないことをしているかも知れませんが
教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

"cん12345"→”CN12345”の実現是非はともかく、
このコードでは文字列を取得したものを変換をしているだけでどこにもセットしていないから何も起きていません。
returnしてもinputのvalueに返すわけではないですからね。
下記のようにvalueにセットしてやる必要があります。

js

1function toHalfWidth(elm) { 2 elm.value = elm.value.replace(/[A-Za-z0-9!-~]/g, function(s){ 3 return String.fromCharCode(s.charCodeAt(0)-0xFEE0); 4 }); 5}

投稿2019/02/27 02:53

m.ts10806

総合スコア80890

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitten

2019/02/27 05:47

ありがとうございます。 こちらの方法でうまく変換されました。
m.ts10806

2019/02/27 05:48

解決されたようで何よりです。
kitten

2019/02/27 06:12

因みにお聞きしますが、小文字を大文字に変換する場合も 同様に-0xFEE0のように文字コードを引くことで 変換することができるのでしょうか?
kitten

2019/02/27 08:32

ありがとうございます。 こちらの関数は上記のコードと組み合わせて使うことは できるのでしょうか?
m.ts10806

2019/02/27 08:35

リファレンス読まれました?文字列に対して行えばいいので、ご自由に。 まずはやってみてください。
guest

0

求められている回答とは違うのですが。

求めている文字だけ入力可能にしてしまえば、変換しなくても済むと思います。

HTML

1<!-- Learn about this code on MDN: https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/text --> 2 3<style> 4div { 5 margin-bottom: 10px; 6 position: relative; 7} 8 9p { 10 font-size: 80%; 11 color: #999; 12} 13 14input + span { 15 padding-right: 30px; 16} 17 18input:invalid+span:after { 19 position: absolute; 20 content: '✖'; 21 padding-left: 5px; 22} 23 24input:valid+span:after { 25 position: absolute; 26 content: '✓'; 27 padding-left: 5px; 28} 29</style> 30<form> 31 <div> 32 <label for="uname">Choose a username: </label> 33 <input type="text" id="uname" name="name" required size="45" 34 pattern="[A-Z0-9]*"> 35 <span class="validity"></span> 36 <p>大文字アルファベットか数字だけ</p> 37 </div> 38 <div> 39 <button>Submit!</button> 40 </div> 41</form> 42 43<script > 44 const editorElem = document.getElementById('uname'); 45 console.log(editorElem); 46 editorElem.addEventListener('compositionupdate', function (event) { 47 alert(`全角で登録したらあかんて`); 48 }); 49 console.log('end'); 50</script>

投稿2019/02/27 05:16

編集2019/02/27 06:31
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitten

2019/02/27 06:16

ありがとうございます。 大変勉強になりました。 このようなやり方もあるのですね。 今回、社内の現場で作業されている方に向けてのもので パソコン操作等に慣れていない方が使われるので なるべくユーザーが何もしなくても良いようなものがしたかったので mts10806さんの回答を採用させていただきました。 また何か行き詰った際にお力添え頂ければと思います。 ありがとうございました。
oikashinoa

2019/02/27 07:12

全角入力しようとしたら警告を出すコードも追加しときました。 > パソコン操作等に慣れていない方が使われるので 私なら入力間違いがそもそも無いように持っていきます。 - teratailの趣旨とは外れますが、バーコードスキャナーとか併用とか - 選択肢が少ないなら、選択してもらう 社内の事情は分かりませんが、以下を気をつけてください。 --- mts10806さんのやり方を試してから考えて欲しいですが、 > "cん12345"→”CN12345”の実現是非はともかく、 ’ん’は何も変換しません。正確には、アルファベットと数字だけ半角にして居るだけです。大文字にするとかはしてないですよ。 const input = "あア亜1Aぁァa"; const convert = input.replace(/[A-Za-z0-9!-~]/g, function (s) { console.log(`${s} > ${String.fromCharCode(s.charCodeAt(0) - 0xFEE0)}`); return String.fromCharCode(s.charCodeAt(0) - 0xFEE0); }) console.log( input); // あア亜1Aぁァa console.log(convert); // あア亜1Aぁァa
guest

0

「ん」とかは煩雑になるのでやめたほうがいい

javascript

1var str="Abc12345"; 2str=str.replace(/[A-Za-z0-9]/g, function(s) { 3 return String.fromCharCode(s.charCodeAt(0) - 65248); 4}).replace(/[a-z]/g, function(s) { 5 return String.fromCharCode(s.charCodeAt(0) -32); 6});

※一部調整

投稿2019/02/27 02:53

編集2019/02/27 02:57
yambejp

総合スコア118162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitten

2019/02/27 06:21

ご回答ありがとうございます。 今回、mts10806様の回答で解決しましたが こちらも参考にさせていただきます。 ありがとうございました。 またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問