从字符串的开头和结尾修剪空格

时间:2010-06-08 19:38:52

标签: javascript regex

我正试图找到一种方法来从标题字符串的开头和结尾修剪空格。我正在使用它,但它似乎没有工作:

title = title.replace(/(^[\s]+|[\s]+$)/g, '');

有什么想法吗?

15 个答案:

答案 0 :(得分:212)

注意:截至2015年,all major browsers (including IE>=9) support String.prototype.trim()。这意味着对于大多数用例而言,仅仅执行str.trim()是实现问题所要求的最佳方式。


Steven Levithan在性能方面分析了Javascript中trim的许多不同实现。

他的建议是:

function trim1 (str) {
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

用于“快速跨浏览器的通用实现”,以及

function trim11 (str) {
    str = str.replace(/^\s+/, '');
    for (var i = str.length - 1; i >= 0; i--) {
        if (/\S/.test(str.charAt(i))) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    return str;
}

“如果你想在所有浏览器中以极快的速度处理长字符串”。

参考

答案 1 :(得分:68)

如果使用jQuery是一个选项:

/**
 * Trim the site input[type=text] fields globally by removing any whitespace from the
 * beginning and end of a string on input .blur()
 */
$('input[type=text]').blur(function(){
    $(this).val($.trim($(this).val()));
});

或简单地说:

$.trim(string);

答案 2 :(得分:48)

正如@ChaosPandion提到的,String.prototype.trim方法已引入ECMAScript 5th Edition规范,some implementations已包含此方法,因此最好的方法是检测本机实现如果它不可用,则声明

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

然后你可以简单地说:

title = title.trim();

答案 3 :(得分:34)

我知道这是一篇旧帖子,但我想我会分享我们的解决方案。在寻求最短的代码(不是每个人都只是简洁的正则表达式),人们可以使用:

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

BTW:我通过上面blog.stevenlevithan.com -- Faster JavaScript Trim共享的链接运行了同样的测试,这个模式击败了所有其他的HANDS!

使用IE8,将test添加为test13。结果是:

  

原始长度:226002
  trim1:110ms(长度:225994)
  trim2:79ms(长度:225994)
  trim3:172ms(长度:225994)
  trim4:203ms(长度:225994)
  trim5:172ms(长度:225994)
  trim6:312ms(长度:225994)
  trim7:203ms(长度:225994)
  trim8:47ms(长度:225994)
  trim9:453ms(长度:225994)
  trim10:15ms(长度:225994)
  trim11:16ms(长度:225994)
  trim12:31ms(长度:225994)
  trim13:0ms(长度:226002)

答案 4 :(得分:11)

ECMAScript 5支持trim,这已在Firefox中实现。

trim - MDC

答案 5 :(得分:11)

在这里,这应该做你需要的一切

function doSomething(input) {
    return input
              .replace(/^\s\s*/, '')     // Remove Preceding white space
              .replace(/\s\s*$/, '')     // Remove Trailing white space
              .replace(/([\s]+)/g, '-'); // Replace remaining white space with dashes
}

alert(doSomething("  something with  some       whitespace   "));

答案 6 :(得分:4)

以下是我过去用来修剪js中的字符串的一些方法:

String.prototype.ltrim = function( chars ) {
    chars = chars || "\\s*";
    return this.replace( new RegExp("^[" + chars + "]+", "g"), "" );
}

String.prototype.rtrim = function( chars ) {
    chars = chars || "\\s*";
    return this.replace( new RegExp("[" + chars + "]+$", "g"), "" );
}
String.prototype.trim = function( chars ) {
    return this.rtrim(chars).ltrim(chars);
}

答案 7 :(得分:4)

这是我当前的代码,如果我评论第3行,第二行有效,但如果我保留它的话就不起作用。

var page_title = $(this).val().replace(/[^a-zA-Z0-9\s]/g, '');
page_title = page_title.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
page_title = page_title.replace(/([\s]+)/g, '-');

答案 8 :(得分:4)

只需使用string.trim()方法即可。它受到所有主流浏览器的支持。 参考此处:http://www.w3schools.com/jsref/jsref_trim_string.asp

答案 9 :(得分:2)

jQuery.trim(“你好,你好吗?”);

:)

答案 10 :(得分:2)

当DOM完全加载时,您可以将其添加到所有文本字段。我从来没有遇到需要提交领先或尾随空间的情况,因此全球范围内一直这样做对我有用......

$(function() { $('input[type=text]').on('blur', function(){
    $(this).val($.trim($(this).val()));
  });
});

答案 11 :(得分:2)

这是JavaScript Architect / Guru Douglas Crockford所建议的。

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

注意:您必须定义"方法" for Function.prototype。

替代地

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

title.trim();    // returns trimmed title

观察

在最近的浏览器中,默认情况下包含 trim 方法。所以你不必明确地添加它。

主要浏览器Chrome,Firefox,Safari等支持 trim 方法。 选中Chrome 55.0.2883.95(64位),Firefox 51.0.1(64位),Safari 10.0(12602.1.50.0.10)。

答案 12 :(得分:1)

var word = " testWord ";   //add here word or space and test

var x = $.trim(word);

if(x.length > 0)
    alert('word');
else
    alert('spaces');

答案 13 :(得分:0)

a recursive try for this

function t(k){ 
    if (k[0]==' ') {
        return t(k.substr(1,k.length));
    } else if (k[k.length-1]==' ') {
        return t(k.substr(0,k.length-1));
    } else {
        return k;
    }
}

call like this:

t("      mehmet       "); //=>"mehmet"

if you want to filter spesific chars you can define a list string basically:

function t(k){
    var l="\r\n\t "; //you can add more chars here.
    if (l.indexOf(k[0])>-1) {
        return t(k.substr(1,k.length));
    } else if (l.indexOf(k[k.length-1])>-1) {
        return t(k.substr(0,k.length-1));
    } else {
        return k;
    }
}

答案 14 :(得分:0)

您也可以使用 trimRight()const str1 = " string "; console.log(str1.trimLeft()); // => "string " const str2 = " string "; console.log(str2.trimRight()); // => " string"

tkinter