簡體   English   中英

javascript中trim()的最佳方法是什么

[英]What is the best way to trim() in javascript

問題說明了一切。 JS似乎沒有本地的trim()方法。

jQuery的最短形式:

string = $.trim(string);

鏈接

根據此頁面 ,最好的全方位方法是

return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

當然,如果您使用的是jQuery,它將為您提供優化的修剪方法。

我知道這個問題很古老,但現在Javascript確實有一個本機.trim()

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

好吧,正如很多人經常說的那樣,trim函數運行得很好,但是如果您不想僅僅使用整個框架來執行修剪,那么看看它的實現可能會很有用。 所以這里是:

function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}

與這里已經提出的其他解決方案相比,我在此實現中看到的主要優點是:

  • “ g”標志可讓您在多行字符串上進行修剪
  • (text ||“”)語法,即使傳遞的參數為null或未定義,也可以確保該函數將始終運行。

正如其他一些人已經指出的那樣,通常最好使用第三方JS庫來完成這種事情。 不是說trim()是一個構建自己的復雜函數,而是您可能不需要太多的JavaScript原生函數,最終卻要自己編寫,使用庫很快變得更具成本效益。

當然,使用JS庫的另一個優點是,作者進行了艱苦的工作,以確保這些功能可在所有主要瀏覽器上正常工作,以便您可以編寫標准接口的代碼,而不必擔心Internet Explorer與所有瀏覽器之間的煩人差異。其他瀏覽器。

@Pat的略微版本。

return str.replace( /^\s+|\s+$/g, '' );

對於ltrim,將字符串開頭的空格替換為空:

str2 = str.replace(/^\s+/,'');

對於rtrim,將字符串末尾的空格替換為空:

str2 = str.replace(/\s+$/,'');

修剪:

str2 = str.replace(/^\s+|\s+$/g,'');

這些都使用正則表達式來完成實際工作。

使用Ariel Flesler的快速修整功能

// Licensed under BSD
function myBestTrim( str ){
 var start = -1,
  end = str.length;
 while( str.charCodeAt(--end) < 33 );
 while( str.charCodeAt(++start) < 33 );
 return str.slice( start, end + 1 );
};

我的解決方案是這樣的(因為Firefox 3.5及更高版本中的String對象已經具有trim方法 ):

String.prototype.trim = String.prototype.trim || function () {
    var start = -1,
        end   = this.length;

    while( this.charCodeAt(--end) < 33 );
    while( this.charCodeAt(++start) < 33 );

    return this.slice( start, end + 1 );
};

為什么不修改String原型呢? 為什么不像我在YUI那樣在開源庫中竊取修整功能? (您真的需要為此簡單的任務加載整個框架嗎?)將它們放在一起,您會得到:

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

var s = " hello ";
alert(s.trim() == "hello"); // displays true

我考慮了微調功能的速度。 此功能明顯擊敗了所有24個競爭對手(其中許多使用正則表達式)以及Chrome和Chromium(!)的本機string.trim(),並且性能與Safari的trim()一樣快。 測試結果在這里: http : //jsperf.com/mega-trim-test/7

function trim27(str) {
  var c;
  for (var i = 0; i < str.length; i++) {
    c = str.charCodeAt(i);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  for (var j = str.length - 1; j >= i; j--) {
    c = str.charCodeAt(j);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  return str.substring(i, j + 1);
}

該函數可修剪字符“ \\ n \\ r \\ t \\ f”,但添加更多的空白字符很容易,例如。 那些將regexp用作空格(\\ s)的文件,但只損失很小的性能(請參閱http://jsperf.com/mega-trim-test/8 )。

編輯:以前的trim27()僅修剪最常見的字符(“ \\ n \\ r \\ t \\ f”),但是要修剪所有可能的空格,我在新函數mytrim()下面添加了它:

if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1)
    var mytrim = function(str) {
        var c;
        for (var i = 0; i < str.length; i++) {
            c = str.charCodeAt(i);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        for (var j = str.length - 1; j >= i; j--) {
            c = str.charCodeAt(j);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        return str.substring(i, j + 1);
    };
    else var mytrim = function(str) {
        return str.trim();
    }

使用這種方式:

var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"

上面的mytrim()執行以下操作:

  • 修剪26個不同的空格( http://perfectionkills.com/whitespace-deviations/中提到的所有25個空格,以及uFEFF,即零寬度休息空間)。
  • 使修剪結果在瀏覽器之間保持一致。
  • 如果可用,則使用本機trim()並具有修剪所有27個不同空格的能力。 Chrome和Chromium例外,它們的本機trim()都很慢,因此我們使用自定義修整,而不是本機。
  • 最重要的是:不漂亮,也不短,但是比http://jsperf.com/mega-trim-test/12中的24種競爭替代品中的任何一種都快得多(例外:Firefox 3.6.25 Windows 7由於未知原因運行mytrim()的速度相當慢。

我將其與本機JavaScript一起使用

// Adding trim function to String object if its not there
if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
}

這樣使用

var myString = "                  some text                  ";

alert(myString.trim());

 // Adding trim function to String object if its not there if(typeof String.prototype.trim !== 'function') { String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/g, ''); } } var str = " some text "; console.log(str.trim()); 

我用這個

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

眾多JavaScript問題的答案:jQuery

$j.trim(string)



注意:以上假設您的jQuery已設置為:

<script type="text/javascript">$j = jQuery.noConflict();</script>

它比“ $”更明智,比每次鍵入“ jQuery”都更冗長。

Microsoft .NET還具有String.trim函數,作為JavaScript基本類型擴展的一部分。 如果您正在編碼ASP.NET應用程序,則可以使用它。

這可能不是最快的,並且可能違反了“ .trim()”可能應該是的事實,但是我不喜歡RegExs(主要是因為花了很多時間才能弄清它們的真正含義/作用),我喜歡無論我是否安裝了jQuery,知道的東西都可以工作(更不用說正確的版本了,因為我使用jQuery 1.4.2嘗試了$ .trim(myVar)卻無法正常工作),並且將擺脫所有多余的空間,而不僅僅是在結尾處,應該像這樣重建它:

function Trim(obj) {
    var coll = "";
    var arrObj = obj.split(' ');

    for (var i=0;i<arrObj.length;i++) {
        if (arrObj[i] == "") {
            arrObj.splice(i,1);  // removes array indices containing spaces
        }
    }
    //alert(arrObj.length);  // should be equal to the number of words
    // Rebuilds with spaces in-between words, but without spaces at the end
    for (var i=0;i<arrObj.length;i++) {
        if (arrObj[i] != "" && i != arrObj.length-1)
            coll += arrObj[i] + " ";
        if (arrObj[i] != "" && i == arrObj.length-1)
            coll += arrObj[i];
    }

    return coll;
}

實際上,使用jQuery似乎是這樣:

jQuery.trim(string)

(參考)

這是一個老問題,但這些都不對我有用。 我只需要剪裁前后的空白,這就是我所做的。 我的div標簽的ID為=開始日期。

$("#start-date").text().trim()

我用這個:

使用功能。

 function trim($) { 
                return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
        }

        code example: 

        trim((function(){ return "a  b"})) // ab

        trim(" a  b") //ab

您可以使用以下...

function trim(str) {
    try {
        if (str && typeof(str) == 'string') {
            return str.replace(/^\s*|\s*$/g, "");
        } else {
            return '';
        }
    } catch (e) {
        return str;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM