javascript - Ta bort mellanslag från början och slutet av sträng
Jag försöker hitta ett sätt att ta bort mellanslag från början och slutet av titeln. Jag använde detta, men det verkar inte fungera:
title = title.replace(/(^[\s]+|[\s]+$)/g, '');
Några idéer?
Svar #1
Obs: Från och med 2015 stödjer alla större webbläsare (inklusive IE>=9) String.prototype.trim(). Detta betyder att för de flesta användningsfall är det helt enkelt att göra str.trim() det bästa sättet att uppnå det som frågan efterfrågar.
Steven Levithan analyserade många olika implementationer av trim i Javascript när det gäller prestanda.
Hans rekommendation är:
function trim1 (str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
för "generellt ändamålsenlig implementation som är snabb på olika webbläsare", och
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;
}
“om du vill hantera långa strängar exceptionellt snabbt i alla webbläsare”.
Referenser
- blog.stevenlevithan.com -- Snabbare JavaScript Trim
Svar #2
Om det är ett alternativ att använda 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()));
});
eller helt enkelt:
$.trim(string);
Svar #3
Som @ChaosPandion nämnde, har String.prototype.trim-metoden introducerats i ECMAScript 5:e upplagans specifikation, vissa implementeringar inkluderar redan denna metod, så det bästa sättet är att upptäcka den inbyggda implementeringen och deklarera den endast om den inte är tillgänglig:
if (typeof String.prototype.trim != 'function') { // detect native implementation
String.prototype.trim = function () {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
Då kan du helt enkelt:
title = title.trim();
Svar #4
Jag vet att detta är ett gammalt inlägg, men jag tänkte bara dela vår lösning. I jakten på kortast kod (älskar inte alla bara kortfattade regex), kan man istället använda:
title = title.replace(/(^\s+|\s+$)/g, '');
Förresten: Jag körde samma test genom länken som delades ovan blog.stevenlevithan.com -- Snabbare JavaScript Trim och detta mönster slog alla de andra med hästlängder!
Använder IE8, lade till test som test13. Resultaten var:
Original längd: 226002
trim1: 110ms (längd: 225994)
trim2: 79ms (längd: 225994)
trim3: 172ms (längd: 225994)
trim4: 203ms (längd:225994)
trim5: 172ms (längd: 225994)
trim6: 312ms (längd: 225994)
trim7: 203ms (längd: 225994)
trim8: 47ms (längd: 225994)
trim9: 453ms (längd: 225994)
trim10: 15ms (längd: 225994)
trim11: 16ms (längd: 225994)
trim12: 31ms (längd: 225994)
trim13: 0ms (längd: 226002)
Svar #5
ECMAScript 5 stöder trim och detta har implementerats i Firefox.
trim - MDC
Svar #6
Här, detta borde göra allt du behöver
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 "));
