我如何从字符串的开始和结束删除所有空白?


当前回答

你可以使用纯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));

其他回答

自IE9+以来的所有浏览器都有trim()方法用于字符串:

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

对于那些不支持trim()的浏览器,你可以使用MDN的这个填充:

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

使用简单的代码

var str = "       Hello World!        ";
alert(str.trim());

浏览器支持

Feature         Chrome  Firefox Internet Explorer   Opera   Safari  Edge
Basic support   (Yes)   3.5     9                   10.5    5       ?

为旧浏览器添加原型

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

我的使用一个regex来寻找需要修剪的情况,并使用regex的结果来确定所需的子字符串边界:

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
}

其中的一个设计决策是使用子字符串执行最终捕获。/ \ ?://(捕获中间项)并且替换片段变成:

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

我在这些建议中做了两个性能赌注:

子字符串实现复制原始字符串的数据吗?如果是这样,在第一种情况下,当一个字符串需要修整时,会有两次遍历,第一次在正则表达式中(希望是部分的),第二次在子字符串提取中。希望子字符串实现只引用原始字符串,这样像substring这样的操作几乎是免费的。交叉手指 正则表达式impl中的捕获有多好?中间项,也就是输出值,可能会很长。我还没有准备好银行所有的regex impls的捕获不会阻止几百KB的输入捕获,但我也没有测试(太多的运行时,对不起!)第二个ALWAYS运行捕获;如果你的引擎可以做到这一点而不受影响,也许可以使用上面的一些技巧,那就一定要使用它!

虽然上面有一堆正确答案,但应该注意的是,JavaScript中的String对象在ECMAScript 5中有一个原生的.trim()方法。因此,在理想情况下,任何尝试创建trim方法原型的尝试都应该首先检查它是否已经存在。

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

本机添加于: JavaScript 1.8.1 / ECMAScript

因此支持:

Firefox: 3.5 +

Safari: 5 +

ie浏览器: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/

如果你已经在使用jQuery框架,那么从jQuery修剪是很方便的。

$.trim('  your string   ');

我倾向于经常使用jQuery,所以用它修剪字符串对我来说是很自然的。但是否有可能出现反对jQuery的声音?:)