在javascript中修剪()的最佳方法是什么?

时间:2008-10-13 07:32:19

标签: javascript jquery string

这个问题说明了一切; JS似乎没有原生的trim()方法。

19 个答案:

答案 0 :(得分:41)

jQuery的最短形式:

string = $.trim(string);

Link

答案 1 :(得分:31)

根据this page,最好的全方位方法是

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

当然,如果您使用的是jQuery,它将为您提供优化的修剪方法。

答案 2 :(得分:18)

好吧,正如很多人总是说的那样,trim函数运行得很好,但是如果你不想仅使用整个框架来执行修剪,那么查看它的实现可能会很有用。所以这就是:

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

与此处已提出的其他解决方案相比,我在此实现中看到的主要优势是:

  • 允许您对多行字符串进行修剪的'g'标志
  • (text ||“”)语法,确保函数始终有效,即使传递的参数为null或未定义。

答案 3 :(得分:17)

我知道这个问题很古老,但现在,Javascript确实有一个原生的.trim()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

答案 4 :(得分:8)

正如其他几个人已经指出的那样,通常最好通过使用第三方JS库来做这种事情。并不是修饰()是一个复杂的功能来自己构建,但是有很多函数不是您可能需要的本机JavaScript并最终自己编写,使用库很快就会变得更具成本效益。 / p>

当然,使用JS库的另一个好处是作者努力确保函数在所有主流浏览器中都能正常工作,这样您就可以编写标准接口代码并忘记互联网之间的烦恼差异资源管理器和所有其他浏览器。

答案 5 :(得分:7)

@ Pat的一个稍微小一点的版本。

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

答案 6 :(得分:6)

对于ltrim,将字符串开头处锚定的空格替换为空:

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

对于rtrim,用字符串替换锚定在字符串末尾的空格:

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

修剪:

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

这些都使用正则表达式来完成实际工作。

答案 7 :(得分:5)

为什么不修改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

答案 8 :(得分:5)

使用Ariel Flesler's fast trim function

// 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 method):

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 );
};

答案 9 :(得分:4)

我考虑到了修剪功能的速度。这个函数明显区别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);
}

该功能修剪字符&#34; \ n \ r \ t \ f&#34;,但添加更多空白字符很容易,例如。那些regexp用作空格(\ s)但只有轻微性能损失的那些(请参阅http://jsperf.com/mega-trim-test/8)。

编辑:上一个trim27()仅修剪最常见的字符(&#34; \ n \ r \ t \ t \ f&#34;),但为了修剪所有可能的空格,我在下面包含了一个新函数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个竞争选项中的任何一个都要快得多(例外:Windows 7中相当旧的Firefox 3.6.25运行mytrim()而不是慢慢地原因不明)。

答案 10 :(得分:3)

我在本机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());

示例

&#13;
&#13;
// 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());
&#13;
&#13;
&#13;

答案 11 :(得分:1)

我用它。

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

答案 12 :(得分:1)

Microsoft .NET还具有String.trim功能,作为JavaScript Base Type Extensions的一部分。如果您正在编写ASP.NET应用程序,则可以使用它。

答案 13 :(得分:1)

许多JavaScript问题的答案:jQuery

$j.trim(string)



注意:以上假设您的jQuery已设置为:

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

这比“$”更明智,而且每次输入“jQuery”都要简单得多。

答案 14 :(得分:0)

我用这个:

使用功能。

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

        code example: 

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

        trim(" a  b") //ab

答案 15 :(得分:0)

您可以使用以下内容......

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

答案 16 :(得分:0)

这可能不是最快的,并且可能违反“.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;
}

答案 17 :(得分:0)

实际上,使用jQuery这似乎是这样的:

jQuery.trim(string)

(Reference)

答案 18 :(得分:0)

这是一个古老的问题,但这些都不适合我。我只需要修剪前导和尾随空白区域,这就是我所做的。我的div标签有一个id =开始日期。

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