Felix Riesterer: Webkit und String.replace()

Beitrag lesen

Liebe JavaScriptler,

ich verwende eine trim()-Funktion, die in ihrer Funktionalität an PHP angelehnt ist. Dabei sollen unter Anderem sowohl Leerzeichen (ASCII-Code 32), als auch geschützte Leerzeichen (ASCII-Code 160) entfernt werden. Das sieht bei mir so aus:

if (typeof(new String().trim) != "function") {  
    String.prototype.trim = function () {  
        var ltrim = new RegExp("^[" + String.fromCharCode(32) + String.fromCharCode(160) + "\t\r\n]+", "g");  
        var rtrim = new RegExp("[" + String.fromCharCode(32) + String.fromCharCode(160) + "\t\r\n]+$", "g");  
  
        s = this.replace(ltrim, "");  
        s = s.replace(rtrim, "");  
  
        return s;  
    }  
}

In den von mir getesteten Browsern (FF, IE, Opera) ergibt obiger Code das gewünschte Ergebnis - bis auf Webkit-basierte Browser (Safari, Google Chrome). Dort wird das geschützte Leerzeichen _nicht_ entfernt.

Beispiel:
javascript:alert("'" + String.fromCharCode(160).trim() + "'")

Obige Zeile in der Adresszeile des Browsers eingegeben ergibt z.B. in Safari
folgende Ausgabe: ' '

Warum ist das so und wie erhalte ich ein sicheres Entfernen dieses geschützten Leerzeichens?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)