JürgenB: Regulärer Ausdruck mit   funktioniert nicht im Safari

Hallo,

mit folgenden Befehl

n = n.replace(/\s| | /g,"");

entferne ich in einem String alle Leerzeichen, auch geschützte. Im IE, im Opera und im Firefox funktioniert das auch, aber der Safari ersetzt nur die " ", nicht aber   und  . Getestet wurde unter Windows. Ich habe auch versucht, die drei Zeichen nacheinander zu ersetzen, was auch nicht funktionierte.

Stellt der Safari geschützte Leerzeichen anders dar oder kann er nicht nach Entities suchen?

Zu Regulären Ausdrücken habe ich noch eine weitere Frage: Mit "\s" finde ich ja alle "white spaces". Gibt es auch eine Möglichkeit, nach allen "spaces" zu suchen, also auch schmale, breite, geschützte, ..., ohne alle im Regulären Ausdruck aufzuführen?

Gruß, Jürgen

  1. Hallo,

    mit folgenden Befehl

    n = n.replace(/\s| | /g,"");

    entferne ich in einem String alle Leerzeichen, auch geschützte. Im IE, im Opera und im Firefox funktioniert das auch, aber der Safari ersetzt nur die " ", nicht aber   und  .

    Du nutzt hier eine HTML-Zeichenkodierung innerhalb eines JavaScripts. Das geht davon aus, dass der HTML-Parser auch den JavaScript-Code parst und Zeichenreferenzen darin auflöst.

    Das ist zwar üblich, aber möglicherweise macht es Safari nicht. Also versuche mal, mit JavaScript das Zeichen einzubinden: \u00A0

    Stellt der Safari geschützte Leerzeichen anders dar oder kann er nicht nach Entities suchen?

    »Nach Entities suchen« tut kein Browser bei dieser Ersetzung!

    Das sind Ebenen, die nie miteinander in Kontakt kommen.

    Gibt es auch eine Möglichkeit, nach allen "spaces" zu suchen, also auch schmale, breite, geschützte, ..., ohne alle im Regulären Ausdruck aufzuführen?

    Nein. Du musst sie auflisten. Am besten in der genannten Schreibweise als hexadezimale Unicode escape sequence.

    Mathias

    1. Hallo molily,

      Das ist zwar üblich, aber möglicherweise macht es Safari nicht. Also versuche mal, mit JavaScript das Zeichen einzubinden: \u00A0

      wenn ich nur nach \u00A0 suche, funktioniert es zwar im Safari, aber nicht im FF. Ich lese den String per innerHTML aus einem HTML-Element ein, vieleicht liegt es daran. Beim Alert sind im FF die   zu sehen. Der Safari zeigt hier Leerzeichen.

      Ich suche jetzt einfach nach allen, dann geht es:

        n = n.replace(/\s| | |\u00A0/g,"");  
      
      

      Danke für deine Hilfe.

      Gruß, Jürgen

      1. Hallo,

        Ich lese den String per innerHTML aus einem HTML-Element ein, vieleicht liegt es daran. Beim Alert sind im FF die   zu sehen. Der Safari zeigt hier Leerzeichen.

        Achso. Da hat natürlich jeder Browser seine eigenen Serialisierungsfunktionen, weil innerHTML nur unzureichend spezifiziert ist.

        Ich suche jetzt einfach nach allen, dann geht es:

        n = n.replace(/\s| | |\u00A0/g,"");

          
        Naja, solange du dir sicher sein kannst, dass ein Element nicht wirklich den Text » « (nach der Auflösung von Entity- und Zeichenreferenzen) beinhaltet.  
          
        Mathias
        
        -- 
        [SELFHTML aktuell Weblog](http://aktuell.de.selfhtml.org/weblog/)