2009-09-13 12 views
143

文字列から先頭と末尾のスペースを取り除く、きれいで効率的なJavaScript実装は何ですか?例えばJavaScript用の文字列()

" dog"

"dog "

" dog "

" dog "

全てが

になってます

+22

この関数は、むしろ 'trim'として知られています。 https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim – Gumbo

+1

@Gumbo:トリムは少し新しく、ブラウザ間でサポートされていない可能性があります。わかりませんが、クロスブラウザのサポートでは決して伝えることはできません。 –

答えて

168

これを使用して:

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の提案を取りました。また、Christophの提案に基づいてグローバル修飾子を追加しました。

トリム機能を再現する前に、スニッフィングに関するMatthew Crumleyのアイデアを取りました。これは、クライアントで使用されているJavaScriptのバージョンがより新しいため、独自のネイティブトリム機能を備えている場合に行われます。

+3

ECMA仕様と互換性のある性能データ – Christoph

+2

についてはhttp://blog.stevenlevithan.com/archives/faster-trim-javascriptを参照してください。 'trim()'は文字列型に 'this'をキャストしなければなりません。 'this.replace(...)'を 'String(this).replace(...)'または '(" '+ this).replace(...) 'に変更する必要があります。これは関数を文字列以外の値に 'call()'または 'apply()'することを可能にします – Christoph

+0

@Christoph:String.prototype.trim()= ...関数定義の中で言いたいのですか?私は "this"が既に文字列を参照していると期待していました。これはString型を拡張するプロトタイプの関数なので、 –

10

私が使用する機能は次のとおりです。

function trim(s){ 
    return (s || '').replace(/^\s+|\s+$/g, ''); 
} 
5

文字列をトリミングするための新しいコードを書くのではなく、 "strip()"という名前の既存のコードを見て、なぜ機能していないのか不思議であれば、 prototypejsフレームワークのように、実際にロードされていることを確認してください。
このフレームワークは、すべてのStringオブジェクトにストリップ機能を追加しますが、たとえばあなたはそれをアップグレードし、あなたのWebページはまだ古い.jsファイルを参照していますが、もちろん動作しません。 jqueryのユーザーの場合

+3

私はここに来たのです! – momeara

64

ガンボが既にコメントでこれを述べたが、これは答えとして繰り返しクマ:trim()方法ではJavaScript 1.8.1で追加されましたし、すべてのモダンブラウザでサポートされています(Firefoxの3.5+、IE 9、Chrome 10、Safari 5.x)をサポートしていますが、IE 8以上ではサポートされていません。使い方は簡単です。また、

" foo\n\t ".trim() => "foo" 

参照:

7

すでにjQueryのを使用している場合は、あなたがjQuery.trim()を見てしたいことがありますすでにjQueryが提供されています。

11

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()サポートなしで古い環境をターゲットにしている場合は、処理するために重要なパフォーマンスの問題が発生する可能性があります。