javascript - Fjern mellomrom fra starten og slutten av strengen


Jeg prøver å finne en måte å fjerne mellomrom fra starten og slutten av tittelstrengen. Jeg brukte dette, men det ser ikke ut til å fungere:

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

Noen ideer?

Svar #1

Merk: Fra og med 2015 støtter alle store nettlesere (inkludert IE>=9) String.prototype.trim(). Dette betyr at for de fleste brukstilfeller er det å rett og slett gjøre str.trim() den beste måten å oppnå det spørsmålet ber om.

Steven Levithan analyserte mange forskjellige implementeringer av trim i Javascript med tanke på ytelse.

Hans anbefaling er:

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

for «generell implementering som er rask på tvers av nettlesere», og

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

«hvis du vil håndtere lange strenger eksepsjonelt raskt i alle nettlesere».

Referanser

  • blog.stevenlevithan.com -- Raskere JavaScript Trim

Svar #2

Hvis det å bruke jQuery er et alternativ:

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

eller rett og slett:

$.trim(string);

Svar #3

Som @ChaosPandion nevnte, har String.prototype.trim-metoden blitt introdusert i ECMAScript 5. utgave-spesifikasjonen, noen implementasjoner inkluderer allerede denne metoden, så den beste måten er å sjekke den native implementeringen og erklære den kun hvis den ikke er tilgjengelig:

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

Da kan du ganske enkelt:

title = title.trim();

Svar #4

Jeg vet at dette er et gammelt innlegg, men jeg tenkte bare jeg skulle dele løsningen vår. I jakten på kortest mulig kode (elskere vel alle kortfattet regex), kunne man i stedet bruke:

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

Forresten: Jeg kjørte denne samme testen gjennom linken delt ovenfor blog.stevenlevithan.com -- Faster JavaScript Trim og dette mønsteret slo alle de andre FULLSTENDIG!

Ved bruk av IE8, lagt til test som test13. Resultatene var:

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

Svar #5

ECMAScript 5 støtter trim og dette har blitt implementert i Firefox.

trim - MDC

Svar #6

Her, dette bør gjøre alt du trenger

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

Relaterte artikler