it-swarm.com.de

Leerzeichen vom Anfang und Ende der Zeichenfolge trennen

Ich versuche einen Weg zu finden, um Leerzeichen vom Anfang und Ende der Titelzeichenfolge zu entfernen. Ich habe das benutzt, aber es scheint nicht zu funktionieren:

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

Irgendwelche Ideen?

148
James Jeffery

Hinweis: Ab 2015 unterstützen alle wichtigen Browser (einschließlich IE> = 9) String.prototype.trim () . Dies bedeutet, dass für die meisten Anwendungsfälle das einfache Ausführen von str.trim() der beste Weg ist, um die gestellten Fragen zu erfüllen. 


Steven Levithan hat viele verschiedene Implementierungen von trim in Javascript hinsichtlich der Leistung analysiert.

Seine Empfehlung lautet:

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

für "Allzweckimplementierung, die ein schneller Browser ist", und

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

"wenn Sie lange Strings in allen Browsern außergewöhnlich schnell behandeln wollen".

Verweise

210

Wenn Sie jQuery verwenden, ist eine Option:

/**
 * 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()));
});

oder einfach:

$.trim(string);
68
Stone

Wie @ChaosPandion erwähnt wurde, wurde die String.prototype.trim-Methode in die ECMAScript 5th Edition Specification, einige Implementierungen enthalten bereits diese Methode. Die beste Methode ist, die native Implementierung zu erkennen und zu deklarieren nur wenn nicht verfügbar:

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

Dann können Sie einfach:

title = title.trim();
48
CMS

Ich weiß, dass dies ein alter Beitrag ist, aber ich dachte nur, ich würde unsere Lösung teilen. Bei der Suche nach dem kürzesten Code (ist nicht jeder love knapper Regex), könnte man stattdessen Folgendes verwenden:

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

Übrigens: Ich habe den gleichen Test über den oben genannten Link blog.stevenlevithan.com - Faster JavaScript Trim durchgeführt und dieses Muster schlug alle anderen HÄNDE nieder!

Mit IE8 wurde Test als Test13 hinzugefügt. Die Ergebnisse waren:

Originallänge: 226002
trim1: 110 ms (Länge: 225994)
trim2: 79ms (Länge: 225994)
trim3: 172ms (Länge: 225994)
trim4: 203ms (Länge: 225994)
trim5: 172ms (Länge: 225994)
trim6: 312ms (Länge: 225994)
trim7: 203ms (Länge: 225994)
trim8: 47ms (Länge: 225994)
trim9: 453ms (Länge: 225994)
trim10: 15ms (Länge: 225994)
trim11: 16ms (Länge: 225994)
trim12: 31ms (Länge: 225994)
trim13: 0 ms (Länge: 226002)

34
user590028

ECMAScript 5 unterstützt trim und wurde in Firefox implementiert.

trimmen - MDC

11
ChaosPandion

Hier sollte dies alles tun, was Sie brauchen

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

Hier ist mein aktueller Code. Die 2. Zeile funktioniert, wenn ich die 3. Zeile kommentiere, aber nicht, wenn ich es so belasse, wie es ist.

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

Verwenden Sie einfach die string.trim()-Methode. Es wird von allen gängigen Browsern unterstützt . Referenz hier: http://www.w3schools.com/jsref/jsref_trim_string.asp

4
Leo

Hier sind einige Methoden, mit denen ich in der Vergangenheit Strings in js beschneiden konnte:

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

Dies wird von JavaScript Architect/Guru Douglas Crockford vorgeschlagen.

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

Anmerkung: Sie müssen "Methode" für Function.prototype definieren.

Alternative

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

title.trim();    // returns trimmed title

Überwachung

In aktuellen Browsern ist die Methode trim standardmäßig enthalten. Sie müssen es also nicht explizit hinzufügen.

Die wichtigsten Browser Chrome, Firefox, Safari usw. unterstützen trim method . In Chrome 55.0.2883.95 (64-Bit), Firefox 51.0.1 (64-Bit), Safari 10.0 (12602.1.50.0.10) überprüft ).

2
mythicalcoder

Wenn das DOM vollständig geladen ist, können Sie dies allen Textfeldern hinzufügen. Ich hatte noch nie eine Situation, in der ich führende oder nachgestellte Räume vorlegen musste. Deshalb hat es die ganze Zeit weltweit funktioniert, für mich zu arbeiten ...

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

jQuery.trim ("Hallo, wie geht es dir?");

:)

2
G-h-o-s-t
var Word = " testWord ";   //add here Word or space and test

var x = $.trim(Word);

if(x.length > 0)
    alert('Word');
else
    alert('spaces');
1
Jitendra

ein rekursiver Versuch dafür 

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

so anrufen:

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

wenn Sie bestimmte Zeichen filtern möchten, können Sie im Grunde eine Listenzeichenfolge definieren:

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;
    }
}
0
mguven guven