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