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?
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".
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);
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();
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)
ECMAScript 5 unterstützt trim
und wurde in Firefox implementiert.
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 "));
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, '-');
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
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);
}
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.
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
title.trim(); // returns trimmed title
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 ).
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()));
});
});
jQuery.trim ("Hallo, wie geht es dir?");
:)
var Word = " testWord "; //add here Word or space and test
var x = $.trim(Word);
if(x.length > 0)
alert('Word');
else
alert('spaces');
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;
}
}