文字列から先頭と末尾のスペースを削除するためのクリーンで効率的なJavaScript実装とは何ですか?
例えば:
" dog"
"dog "
" dog "
" dog "
すべてに変わる
"dog"
これを使って:
if(typeof(String.prototype.trim) === "undefined")
{
String.prototype.trim = function()
{
return String(this).replace(/^\s+|\s+$/g, '');
};
}
これで、トリム関数が文字列のファーストクラス関数として利用可能になります。例えば:
" dog".trim() === "dog" //true
EDIT:正規表現パターンを1つに結合するJ-Pの提案を受け入れました。また、クリストフの提案に従ってグローバル修飾子を追加しました。
トリム機能を再作成する前に、その機能をスニッフィングするというMatthew Crumleyのアイデアを取り入れました。これは、クライアントで使用されているJavaScriptのバージョンがより新しいため、独自のネイティブトリム機能がある場合に行われます。
Jqueryユーザーの場合、$.trim(s)
はどうですか
ガンボはすでにコメントでこれを指摘しましたが、これは答えとして繰り返します:trim()
メソッドはJavaScript 1.8.1で追加され、すべての最新ブラウザー(Firefox 3.5 +、IE 9、Chrome 10、Safari 5.x)、IE 8以前ではサポートされていません。使い方は簡単です:
" foo\n\t ".trim() => "foo"
こちらもご覧ください:
これが私が使用する関数です。
function trim(s){
return ( s || '' ).replace( /^\s+|\s+$/g, '' );
}
BOM および NBSP の削除をサポートする MDN からのより良いポリフィル
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
組み込みのプロトタイプを変更するとパフォーマンスが低下することに注意してください(JSエンジンは多くのランタイム最適化を必要とするため)。パフォーマンスが重要な状況では、代わりにmyTrimFunction(string)
を定義する代替案を検討する必要があります。そうは言っても、ネイティブの.trim()
サポートのない古い環境をターゲットにしている場合、対処すべきパフォーマンスの問題がより重要になる可能性があります。
Steven Levithan はかつて Faster JavaScript Trim を実装する方法について書きました。一見の価値があります。
すでにjQueryを使用している場合は、jQueryで既に提供されている jQuery.trim()
をご覧ください。
文字列をトリムする新しいコードを書くのではなく、「strip()」を呼び出す既存のコードを見て、なぜ機能しないのか疑問に思っている場合は、prototypejsフレームワークのようなものを含めようとするかどうかを確認することができます、実際にロードされていることを確認してください。
このフレームワークは、すべてのStringオブジェクトにストリップ関数を追加しますが、アップグレードしましたが、Webページはまだ古い.jsファイルを参照しているため、もちろん動作しません。