1346

JavaScriptで文字列をトリミングするにはどうすればよいですか?つまり、JavaScriptで文字列の最初と最後からすべての空白を削除するにはどうすればよいですか?

4

20 に答える 20

926

IE9 +以降のすべてのブラウザにはtrim()、文字列のメソッドがあります。

" \n test \n ".trim(); // returns "test" here

をサポートしていないブラウザの場合は、 MDNtrim()からこのポリフィルを使用できます。

if (!String.prototype.trim) {
    (function() {
        // Make sure we trim BOM and NBSP
        var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
        String.prototype.trim = function() {
            return this.replace(rtrim, '');
        };
    })();
}

とはいえ、を使用する場合はjQuery$.trim(str)も使用可能であり、undefined/nullを処理します。


これを参照してください:

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

String.prototype.ltrim=function(){return this.replace(/^\s+/,'');};

String.prototype.rtrim=function(){return this.replace(/\s+$/,'');};

String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};
于 2009-01-31T15:26:30.163 に答える
482

すでにそのフレームワークを使用している場合は、 jQueryからのトリムが便利です。

$.trim('  your string   ');

私はjQueryを頻繁に使用する傾向があるので、jQueryを使用して文字列をトリミングするのは自然なことです。しかし、jQueryに対する反発がある可能性はありますか?:)

于 2009-01-31T15:16:43.087 に答える
165

以上のように正解は山ほどありますが、 ECMAScript 5Stringの時点で JavaScript のオブジェクトにはネイティブ.trim()メソッドがあることに注意してください。したがって、理想的には、trim メソッドのプロトタイプを作成しようとする場合は、最初にそれが既に存在するかどうかを実際に確認する必要があります。

if(!String.prototype.trim){  
  String.prototype.trim = function(){  
    return this.replace(/^\s+|\s+$/g,'');  
  };  
}

ネイティブに追加: JavaScript 1.8.1 / ECMAScript 5

したがって、以下でサポートされています。

Firefox: 3.5+

サファリ: 5+

Internet Explorer: IE9+ (標準モードのみ!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more .aspx

クローム: 5+

オペラ: 10.5+

ECMAScript 5 サポート表: http://kangax.github.com/es5-compat-table/

于 2011-12-15T15:21:41.340 に答える
129

使用できる実装はたくさんあります。最も明白なのは次のようなもののようです:

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
};

" foo bar ".trim();  // "foo bar"
于 2009-01-31T15:14:23.667 に答える
47

簡単なバージョンはこちらJavaScriptトリムの一般的な関数は何ですか?

function trim(str) {
        return str.replace(/^\s+|\s+$/g,"");
}
于 2009-01-31T15:15:16.693 に答える
30

この質問は 3 年前に尋ねられたことを知っていString.trim()ます。現在、JavaScript でネイティブに追加されました。たとえば、次のように直接トリミングできます。

document.getElementById("id").value.trim();
于 2012-01-25T11:02:05.623 に答える
22

jQuery を使用している場合は、jQuery.trim()関数を使用します。例えば:

if( jQuery.trim(StringVariable) == '')
于 2011-08-18T13:38:15.583 に答える
20

Fragrant Badasseryには、ベンチマーク情報を含む 11 の異なるトリムがあります。

http://blog.stevenlevithan.com/archives/faster-trim-javascript

当然のことながら、正規表現ベースは従来のループよりも低速です。


ここに私の個人的なものがあります。このコードは古いです!私は JavaScript1.1 と Netscape 3 用に書きましたが、それ以来少しだけ更新されています。(元は String.charAt を使用)

/**
 *  Trim string. Actually trims all control characters.
 *  Ignores fancy Unicode spaces. Forces to string.
 */
function trim(str) {
    str = str.toString();
    var begin = 0;
    var end = str.length - 1;
    while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; }
    while (end > begin && str.charCodeAt(end) < 33) { --end; }
    return str.substr(begin, end - begin + 1);
}
于 2011-03-10T13:38:01.033 に答える
15

ネイティブ JavaScript メソッドを使用します: String.trimLeft()String.trimRight()、およびString.trim()


String.trim()IE9+ およびその他すべての主要なブラウザーでサポートされています。

'  Hello  '.trim()  //-> 'Hello'


String.trimLeft()String.trimRight()非標準ですが、IE を除くすべての主要なブラウザーでサポートされています。

'  Hello  '.trimLeft()   //-> 'Hello  '
'  Hello  '.trimRight()  //-> '  Hello'


ただし、ポリフィルを使用すると、IE のサポートは簡単です。

if (!''.trimLeft) {
    String.prototype.trimLeft = function() {
        return this.replace(/^\s+/,'');
    };
    String.prototype.trimRight = function() {
        return this.replace(/\s+$/,'');
    };
    if (!''.trim) {
        String.prototype.trim = function() {
            return this.replace(/^\s+|\s+$/g, '');
        };
    }
}
于 2013-02-23T05:32:23.753 に答える
12
String.prototype.trim = String.prototype.trim || function () {
    return this.replace(/^\s+|\s+$/g, "");
};

String.prototype.trimLeft = String.prototype.trimLeft || function () {
    return this.replace(/^\s+/, "");
};

String.prototype.trimRight = String.prototype.trimRight || function () {
    return this.replace(/\s+$/, "");
};

String.prototype.trimFull = String.prototype.trimFull || function () {
    return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " ");
};

Mattdueregから恥知らずに盗まれました。

于 2013-03-11T02:46:41.613 に答える
3

これは非常に簡単な方法です:

function removeSpaces(string){
return string.split(' ').join('');
}
于 2015-10-15T21:20:55.440 に答える
1

プレーンな JavaScript を使用して実行できます。

function trimString(str, maxLen) {
if (str.length <= maxLen) {
return str;
}
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}

// Let's test it

sentenceOne = "too short";
sentencetwo = "more than the max length";

console.log(trimString(sentenceOne, 15));
console.log(trimString(sentencetwo, 15));
于 2016-06-19T16:02:55.120 に答える
1

トリムを使用するライブラリがあります。次のコードを使用して解決しました。

String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };
于 2012-11-12T13:39:20.343 に答える
0

ここにどんなバグが隠されているのかわかりませんが、私はこれを使用しています:

var some_string_with_extra_spaces="   goes here    "
console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0])

または、テキストが含まれている場合は、次のようになります。

console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0])

別の試み:

console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1])
于 2012-06-22T09:58:39.793 に答える
-4

私は単一の正規表現を使用してトリミングが必要なケースを探し、その正規表現の結果を使用して目的の部分文字列の境界を決定します。

var illmatch= /^(\s*)(?:.*?)(\s*)$/
function strip(me){
    var match= illmatch.exec(me)
    if(match && (match[1].length || match[2].length)){
        me= me.substring(match[1].length, p.length-match[2].length)
    }
    return me
}

これに関する 1 つの設計上の決定は、部分文字列を使用して最終的なキャプチャを実行することでした。s/\?:// (中間項をキャプチャーする) および置換フラグメントは次のようになります。

    if(match && (match[1].length || match[3].length)){
        me= match[2]
    }

これらの impl で行った 2 つのパフォーマンスの賭けがあります。

  1. 部分文字列の実装は元の文字列のデータをコピーしますか? その場合、最初に、文字列をトリミングする必要があるときに、最初に正規表現 (できれば部分的である可能性があります) で、2 番目に部分文字列抽出で、二重トラバーサルがあります。うまくいけば、部分文字列の実装は元の文字列のみを参照するため、部分文字列のような操作はほぼ自由になります。クロスフィンガー

  2. regex impl でのキャプチャはどのくらい良いですか? 中間項である出力値は、非常に長くなる可能性があります。私は、すべての正規表現 impl のキャプチャが数百 KB の入力キャプチャで失敗しないことを保証する準備ができていませんでしたが、テストもしませんでした (ランタイムが多すぎて申し訳ありません!)。2 番目は常にキャプチャを実行します。あなたのエンジンがヒットせずにこれを行うことができれば、おそらく上記のストリングローピングテクニックのいくつかを使用して、それを使用してください!

于 2012-02-02T23:22:10.500 に答える
-7

IE9+ およびその他のブラウザーの場合

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}
于 2013-04-24T08:37:48.903 に答える