Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Probleme mit RegEx

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Probleme mit RegEx

    Hallo,
    ich muss gerade ein Skript von nem anderen zum Laufen bringen und hab Probleme mit der RegEx.

    Er prüft, mit eregi(); ob ein vom Formular übergebener Wert wohl kein Zeichen drin hat das nicht in folgendem regulärem Ausdruck enthalten ist:
    PHP-Code:
    <?php
    $regex 
    "[a-zA-Z[:space:]ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ-.`Ž']+";
    eregi("^$regex$",$string);
    ?>
    Die ergegi murrt nun schon Mal an dem :space:, hab ich durch ein eingetipptes Leerezeichen ausgetauscht, dann kommt zumindest keine Fehlermeldung mehr, dennoch kommt ein einfacher String wie mein Name "Markus" schon nicht durch. Woran liegt das? Es sind ja nur Subpatterns die er vergleichen soll. Was das Plus am Ende bewirkt hab ich auch nicht durchschaut.

    mfg

    AN DEN WEBMASTER,
    dem ich eine Mail wegen diesem Beitrag geschrieben habe: Die Vorschau hat sämtliche Sonderzeichen zu ¼?Á ausgetauscht, nachdem ich editiert und alle Sonderzeichen erneut eingetippt und sofort abgespeichert habe gehts nun wieder.


  • #2
    Woran liegt das? Es sind ja nur Subpatterns die er vergleichen soll. Was das Plus am Ende bewirkt hab ich auch nicht durchschaut.
    Als PHP - Fortgeschrittener gehe ich davon aus, dass du noch bissel darüber lesen wirst.

    Vermutlich kommste besser, und die Zeichen zu definieren, die nicht vorkommen dürfen.
    Und anstelle von eregi() mit preg_match() arbeiten.

    Kommentar


    • #3
      >>Als PHP - Fortgeschrittener (...)
      was sollte das bitte?

      >> Vermutlich kommste besser, und die Zeichen zu definieren, die nicht vorkommen dürfen.
      Weißt du wieviele Zeichen es gibt? Allein mit denen die unsere Tastatur möglich macht würde ich den obrigen String schon übertreffen. Abgesehen davon, dass es nichts daran ändert warums nicht funktioniert! Dann hab ich das Problem halt andersherum.

      >> Und anstelle von eregi() mit preg_match() arbeiten.
      Und warum? Die verwenden die selbe Engine.

      Auf die Frage bist du nicht einmal eingegangen. Es gehört schon auch was dazu sich "Fortgeschrittener" zu nennen, zum Beispiel das man nicht auf einem Nebenzitat rumhackt sondern den Kern der Frage auch erkennt.

      merkwürdig, sehr merkwürdig.

      Kommentar


      • #4
        Es gehört sich als PHP-Fortgeschrittener, sich mal ein wenig mehr mit der Sache zu beschäftigen. Wenn du nichtmal deine eignen Skriptteile verstehst, solltest du dann vielleicht doch lieber die Manual konsultieren. Was glaubst du warum er dir preg_match() anstelle von eregi() empfiehlt. Vielleicht einfach mal so machen, er hat seine Gründe dafür, die dir Google en Masse bereitwillig gibt.

        Das PHP-Fortgeschrittenen Forum ist eigentlich für Fragen die in den fortgeschrittenen Bereich gehören, das steht nicht dafür, dass dir Fortgeschrittene antworten.

        Wenn du schon in deinem eigenen Beitrag sagst, das du die Manual nicht angeschaut hast, kann man dir nicht helfen.

        Edit: Um deine Frage zum "+" zu klären. Der Quantifier "+" bedeutet, das nur Zeichenketten, die mind. 1 der Zeichen enthält zutreffen. Leere Strings werden ignoriert.

        Kommentar


        • #5
          >>Als PHP - Fortgeschrittener (...)
          was sollte das bitte?
          Das bezog sich auf deine Aussage:
          Was das Plus am Ende bewirkt hab ich auch nicht durchschaut.
          Weißt du wieviele Zeichen es gibt? Allein mit denen die unsere Tastatur möglich macht würde ich den obrigen String schon übertreffen. Abgesehen davon, dass es nichts daran ändert warums nicht funktioniert! Dann hab ich das Problem halt andersherum.
          Das weis ich, mache das lange genug
          Allerdings ist mir unklar, was du genau machen willst.
          Willst du nur einen Namen überprüfen ?
          Vieleicht hilft dir das aber weiter:
          http://www.cix88.de/cix_php/tonne/au...hen_testen.php

          >> Und anstelle von eregi() mit preg_match() arbeiten.
          Und warum? Die verwenden die selbe Engine.
          ereg() und eregi() sind veraltet, und je nachdem was du machen willst, ist preg_match() beser geeignet.
          Der Handlungsspielraum der Pattern lässt mehr zu.
          Auszug aus dem Handbuch:

          Anmerkung: Die Funktion preg_match(), die eine zu Perl kompatible Syntax regulärer Ausdrücke verwendet, ist häufig die schnellere Alternative zu ereg().
          Es gehört schon auch was dazu sich "Fortgeschrittener" zu nennen
          Weis nicht, was du damit meinst.
          Meinste mich damit ?
          Falls ja -> solange ich hier bin, habe ich das noch nicht behauptet.

          Kommentar


          • #6
            @dtdesign, Danke für die Info zum Plus, den Rest den du gesagt hast ignorier ich einfach, weils selbstverständlich ist und es mich nur aufregt das jemand sowas zu mir sagt.

            @CIX88
            In der Doku steht nicht das die verlatet sind. Und eigentlich verlass ich mich nur darauf. Sonst verwend ich auch immer preg_match das da jetzt ereg verwendet wird hat mich verwirrt. Aber vom Fehler her, der im Suchschema liegt, war es völlig irrelevant welche Funktion man nimmt (hätte aber dazusagen sollen das ichs mit beiden probiert habe) es funzt nicht, nach meinem Verständnis sollte es as aber. Daher auch das Fortgeschrittenen Forum. Ich hatte die Berfürchtung es wäre ein tiefergehender Fehler.

            Warum die Suchanfrage oben aber nun nicht geht ist immer noch offen. Denn wenn das Plus nur dafür sorgt, das leerstrings ignoriert werden, erklärt es noch immer nicht warum diese einfache Subpattern nicht geht. So wies da steht ists doch richtig.

            Kommentar


            • #7
              Lass mich raten du bekommst auch REG_ERANGE als Fehler ?

              PHP-Code:
              <?php
              error_reporting
              (E_ALL);

              $string 'Markus';
              $regex "[a-zA-Z[:space:]ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ\-\.`Ž']+"
              if (
              eregi("^$regex$",$string)) echo 'jo'

              ?>
              Erkennste hinten den Unterschied ...

              EDIT:

              Bei - und . muss ein \ davor, weil du willst das ja als Zeichen haben.
              Sonst wird das falsch interpretiert

              Kommentar


              • #8
                Hm, ja so funktionierts, was witzig ist weil ich beim rumprobieren alle Sonderzeichen maskiert habe. Ich hab schon hunderte solcher Suchschemen gemacht - dennoch - die werden mit immer ein Rätsel bleiben.

                Herzlichen Dank!

                Kommentar


                • #9
                  dennoch - die werden mit immer ein Rätsel bleiben.
                  Dann wird es mal Zeit für einen Crashkurs
                  http://www.regenechsen.de/regex_de/regex_1_de.html

                  Echt gutes Tutorial..

                  Kommentar


                  • #10
                    Oi nach sowas such ich schon lang.

                    Kommentar


                    • #11
                      Oi nach sowas such ich schon lang.
                      Man findet aber mit Google noch weitere nützliche Infos zu regulären Ausdrücken.
                      Der oben genannte Link ist wirklich auch nur als Crashkurs zu betrachten.
                      Wer sich dafür ernsthaft interessiert sollte sich auch andere Seiten dazu angucken.

                      Kommentar

                      Lädt...
                      X