Sonntag: Reguläre Ausdrücke - Abfrage zusammenfassen

Hallo,

Ich habe hier eine - mit Hilfe dieses Forums fabrizierte - Funktion, die dafür sorgt, dass aus einem Textfeld beim Event onBlur()

a.) grundsätzlich alle Leerzeichen VOR dem Wert entfernt werden

b.) grundsätzlich alle Leerzeichen NACH dem Wert entfernt werden

und  ( wenn ein Wert aus zwei oder mehreren Wörtern besteht, die durch MEHR ALS EIN Leerzeichen getrennt sind )

c.) die Wörter grundsätzlich NUR DURCH EIN Leerzeichen getrennt werden

( Aufgabenstellung: bei der Weiterverarbeitung der Formulardaten ist es notwendig, dass alle unerwünschten Leerzeichen entfernt wurden )

//
//
//

function leerzeichen ()
{

wert = document.formular.elements[textfeld].value;

wert = wert.replace(/\s*/,'');

wert = wert.replace(/\s*$/,'');

wert = wert.replace(/\s+/g,' ');

document.formular.elements[textfeld].value = wert;

}

//
//
//

Meine erste Frage hierzu:

Ist es möglich, Arbeitsschritte der Funktion zusammenzufassen - ich suche praktisch nach einer UND-Verknüpfung von regulären Ausdrücken nach dem Muster:

wert = suche im wert nach allen Leerzeichen VOR dem Wert UND alle Leerzeichen NACH dem Wert und ersetze sie durch nichts (entferne sie).

Meine zweite Frage hierzu:

Ist es sinnvoll, in der Funktion vorab mit exec zu prüfen, ob der Wert überhaupt ein Leerzeichen enthält ? Die Funktion wird zwar in jedem Fall anstandslos ausgeführt, bin mir aber nicht mehr sicher, ob ich damit die Abarbeitung des Scripts unnötig verlangsame bzw. mit einer Vorab-Abfrage effektiver machen kann .....

Mit freundlichen Grüßen

Sonntag

  1. Hi,

    wert = wert.replace(/\s*/,'');

    dies entfernt pauschal alle Leerzeichen - auch keine. Dach vergessen, * durch + ersetzen.

    wert = wert.replace(/\s*$/,'');

    Dies ersetzt auch keine Leerzeichen.

    wert = wert.replace(/\s+/g,' ');

    Dies ersetzt auch _ein_ Leerzeichen durch ein Leerzeichen. {2,} ist Dein Freund.

    Ist es möglich, Arbeitsschritte der Funktion zusammenzufassen

    Die ersten beiden schon, das verringert aber nur ihre Effizienz. Lass es ruhig so (nachdem Du die einzelnen RegExp korrigiert und optimiert hast).

    Ist es sinnvoll, in der Funktion vorab mit exec zu prüfen, ob der Wert überhaupt ein Leerzeichen enthält ?

    Nö. Du könntest vorher prüfen, ob der Wert leer ist.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah

      danke für die rasend schnelle Antwort.

      Gib mir ein wenig Zeit zum basteln; bin ein wenig überrascht, weil das Script in der bisherigen Form seine Zwecke erfüllt hat.

      Deine Vorschläge zur ersten Zeile hab ich z.B. schon mal durchprobiert, und es hatte omischerweise nicht den entspr.Erfolg.

      Das mit dem {2,} werde ich ausprobieren - war mir bis dato unbekannt .-/ und weiss noch nicht, wie einzusetzen.

      Wie gesagt: werde Deine Tips durchprobieren ....

      MFG Sonntag

      1. Hi,

        Gib mir ein wenig Zeit zum basteln;

        so viel Du willst.

        bin ein wenig überrascht, weil das Script in der bisherigen Form seine Zwecke erfüllt hat.

        Das ist oft so, teilweise wird die gewünschte Funktion sogar _wirklich_[1] erfüllt. Das heißt aber noch nichts.

        Deine Vorschläge zur ersten Zeile hab ich z.B. schon mal durchprobiert, und es hatte omischerweise nicht den entspr.Erfolg.

        Wie sah der Code aus?

        Das mit dem {2,} werde ich ausprobieren - war mir bis dato unbekannt .-/ und weiss noch nicht, wie einzusetzen.

        Es ist ähnlich anzuwenden wie + oder * und ermöglicht eine "von ... bis"-Angabe.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi Cheatah,

          abermals Dank wg. der Erklärung zu {2,} - war familiär (würg) gebunden, und bin erst jetzt zum basteln gekommen:

          also so wäre meine Lösung:

          //
          //

          wert = wert.replace(/^\s+/,'');

          wert = wert.replace(/\s+$/,'');

          wert = wert.replace(/\s+/g,' ');

          //
          //

          Zu der dritten Zeile - und Deiner Empfehlung:

          Würde ich so machen:

          wert = wert.replace(/\s{2,}/g,' ');

          Wäre gut, wenn ich wüßte, was {2,} im Klartext bedeuten würde ?
          Könnte heissen; suche nach \s, wenn es zweimal oder beliebig oft vorhanden ist .......

          Weisst Du eine gute - ausführliche - verständliche Quelle, wo ich was über Reguläre Ausdrücke lernen kann ?

          MFG Sonntag

          1. Hi,

            wert = wert.replace(/\s{2,}/g,' ');
            Wäre gut, wenn ich wüßte, was {2,} im Klartext bedeuten würde ?

            so wie "+" soviel wie "mindestens 1" bedeutet, heißt "{a,b}" soviel wie "mindestens a, höchstens b", wobei beide Werte optional sind und ...

            Könnte heissen; suche nach \s, wenn es zweimal oder beliebig oft vorhanden ist .......

            ... beim Weglassen "beliebig oft" bedeuten.

            Weisst Du eine gute - ausführliche - verständliche Quelle, wo ich was über Reguläre Ausdrücke lernen kann ?

            Ich konsultiere bei Fragen gewöhnlich die Perl-Dokumentationsseite "perlre". Ob diese Deiner Definition von "verständlich" entspricht, vermag ich aber nicht zu beurteilen ...

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes