簡體   English   中英

從字符串的開頭和結尾修剪空格

[英]Trim spaces from start and end of string

我試圖找到一種方法來修剪標題字符串開頭和結尾的空格。 我正在使用它,但它似乎不起作用:

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

有任何想法嗎?

注意:截至 2015 年, 所有主流瀏覽器(包括 IE>=9)都支持 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;
}

“如果你想在所有瀏覽器中以異常快的速度處理長字符串”。

參考

如果使用 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);

正如@ChaosPandion提到的, String.prototype.trim方法已經被引入到ECMAScript 第 5 版規范中,一些實現已經包含這個方法,所以最好的方法是檢測本機實現並在它不可用時才聲明它:

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

然后你可以簡單地:

title = title.trim();

我知道這是一個舊帖子,但只是想我會分享我們的解決方案。 為了尋求最短的代碼(不是每個人都喜歡簡潔的正則表達式),可以改為使用:

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

順便說一句:我通過blog.stevenlevithan.com上面共享的鏈接進行了同樣的測試 ——更快的 JavaScript Trim和這種模式擊敗了所有其他人!

使用IE8,添加測試為test13。 結果是:

原長度:226002
修剪 1:110 毫秒(長度:225994)
修剪 2:79 毫秒(長度:225994)
修剪 3:172 毫秒(長度:225994)
修剪 4:203 毫秒(長度:225994)
修剪 5:172 毫秒(長度:225994)
trim6:312ms(長度:225994)
修剪7:203ms(長度:225994)
trim8:47ms(長度:225994)
修剪 9:453 毫秒(長度:225994)
修剪 10:15 毫秒(長度:225994)
修剪 11:16 毫秒(長度:225994)
修剪 12:31 毫秒(長度:225994)
修剪 13:0 毫秒(長度:226002)

ECMAScript 5 支持trim ,這已在 Firefox 中實現。

修剪 - MDC

在這里,這應該可以滿足您的所有需求

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

只需使用string.trim()方法。 所有主要瀏覽器都支持它。 參考這里: http : //www.w3schools.com/jsref/jsref_trim_string.asp

以下是我過去用於在 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);
}

這是我當前的代碼,如果我評論第 3 行,則第 2 行有效,但如果我保持原狀,則不起作用。

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

jQuery.trim(" 你好,你好嗎?");

:)

當 DOM 完全加載時,您可以將其添加到所有文本字段。 我從來沒有遇到過需要提交前導或尾隨空格的情況,所以在全球范圍內一直這樣做對我有用......

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

這是 JavaScript 架構師/Guru Douglas Crockford 建議的。

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

注意:您必須為 Function.prototype 定義“方法”。

或者

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

title.trim();    // returns trimmed title

觀察

在最近的瀏覽器中,默認包含trim方法。 所以你不必明確添加它。

主流瀏覽器 Chrome、Firefox、Safari 等都支持修剪方法。 在 Chrome 55.0.2883.95(64 位)、Firefox 51.0.1(64 位)、Safari 10.0(12602.1.50.0.10)中檢查。

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

var x = $.trim(word);

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

為此遞歸嘗試

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

像這樣調用:

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

如果你想過濾特定的字符,你基本上可以定義一個列表字符串:

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

您也可以使用trimLeft()trimRight()

const str1 = "   string   ";
console.log(str1.trimLeft()); 
// => "string   "

const str2 = "   string   ";
console.log(str2.trimRight());
// => "    string"

暫無
暫無

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

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