- ベストアンサー
JavaScriptのスペース削除について
- JavaScriptでのスペース削除方法について質問です。
- JavaScriptのコードで、入力された値の前後にある全角半角スペースを削除する方法を教えてください。
- 全角スペースに関しては削除されず、文字として認識されてしまいます。どなたか解決方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
元のtrim関数はすべての空白を削除していますが、削除するのが前後の空白でよければそれで良いです。 回答したものに変更してください。 (元の処理ではこうなっている:" a b c "→"abc") // 私なら以下のようにします。 function trim(nameTXT) { return nameTXT.replace(/^[\s ]+|[\s ]+$/g, ""); } function check() { var nameTXT = document.formMerchandise.name.value || ""; nameText = trim(nameText); // 前後の空白除去 if(nameTect === ""){ alert("商品名を入力してください"); document.formMerchandise.name.focus(); return false; } if(nameTXT.length > 25){ alert("商品名は25文字までです"); document.formMerchandise.name.focus(); return false; } document.formMerchandise.name.value = nameText; // 空白を除去したものを入れなおす return true; } // 半角空白はつぶれるので、インデントは全角空白を使っています、コピペする場合はインデントの全角を半角に変えてください
その他の回答 (2)
- think49
- ベストアンサー率59% (285/482)
既に指摘がありますが、「完全な空白文字削除」は「先頭の空白文字削除」で満たせる為、「前後の空白文字削除」で要件を満たせます。 また、\s は ECMAScript 3 の頃から全角空白を含むため、ECMAScript 3 準拠のブラウザであれば string.replace(/^\s+|\s+$/g) で要件を満たせます。 しかしながら、JScriptエンジンを搭載する IE8- では \s === [\f\n\r\t\v] の為、この方法では実装できません。 https://msdn.microsoft.com/en-us/library/1400241x.aspx ECMAScript 5 で本要件を満たせる String.prototype.trim が実装されましたが、やはり、IE8- では実装されていません。 http://kangax.github.io/compat-table/es5/ 結論をいえば、「String.prototype.trim の Polyfill を書く」もしくは「String.prototype.trimがあればそれを使い、なければ独自関数を使う」ように書けばよいと思います。 影響範囲が少ない後者で書くなら下記のように。 --- var trim = (function (String) { if (typeof String.prototype.trim === 'function') { return function trim (string) { return String(string).trim(); }; } return function trim (S) { var S = String(S), // 以降、https://gist.github.com/think49/630648 の "this.trim = function () {" の行を参照 return S.replace(new RegExp('^' + whitespaces + '|' + whitespaces + '$', 'g'), ''); }; })(String); --- 参考 http://togetter.com/li/43953 http://okwave.jp/qa/q6085442.html https://gist.github.com/think49/630648 # Re: chelsea00さん
- byDesign
- ベストアンサー率75% (45/60)
前後の全角半角スペースを削除したいと言う事でしょうか? それであれば、以下でどうでしょうか? nameTXT = nameTXT.replace(/^[\s ]+|[\s ]+$/g, "");
補足
回答誠にありがとう御座います。JavaScriptはまだ慣れていなくて、というのは言い訳にもなりませんが、ここで定めているnameTXTというのが、jspのテキストボックスに値、ここで言う商品名を入力するという事になるのです。なので、 /*(1)*/function trim(nameTXT) { return nameTXT.replace(/^[ \t\r\n]+|[ \t\r\n]+|[ \t\r\n]+|[ \t\r\n]+$/g, ""); } の部分を、回答して頂いた /*(1)*/function trim(nameTXT) { return /*回答して下さった部分*/nameTXT.replace(/^[\s ]+|[\s ]+$/g, ""); } として、入力された値をこのメソッドで変換し、以降の // 未入力またはスペース入力時のアラート及びフォーカス処理関数 function check() { var nameTXT = document.formMerchandise.name.value; if(trim(nameTXT).match(/ |\s+/)||trim(nameTXT)==""){ alert("商品名を入力してください"); document.formMerchandise.name.focus(); return false; } if(trim(nameTXT)>25){ alert("商品名は25文字までです"); document.formMerchandise.name.focus(); return false; } return true; } に繋げる、という考え方で宜しいのでしょうか?勉強不足で申し訳ありません。