Problem mit ereg()

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

  • Problem mit ereg()

    Hi,
    ich bin neu hier und habe da gleich einmal ein Problem.
    Ich lerne seit 2 Wochen erst PHP, also seid bitte etwas nachlässig mit mir.

    PHP-Code:
    $wort 'Test13';
    $test ereg('([a-z])',$wort);
    print (
    $test); 
    print (
    "<br>");
    print (
    $wort); 
    Eigendlich möchte ich, überprüfen, ob ein String nur aus Buchstaben besteht, bzw. später noch ob es sich um eine Telefonnummer handelt wie 04101/1234567. Nun kommt aber immer für den Wert $Test 1 raus, wobei dort eignedlich 0 stehen sollte bzw. false. Kann mir jemand sagen was ich falsch gemacht habe?

  • #2
    nimm mal preg_match() - ereg() ist afaik veraltet.

    Und beschäftige dich mit regulären Ausdrücken. Dein Ausdruck sucht nach einem Buchstaben zwischen a und z und ist auch nicht gültig, weil er keine Delimiter hat.

    "/[a-z]+/" würde dir fürn anfang helfen. Die runden klammern benutzt man um eine Gruppierung zu erstellen die man dann weiter verwenden kann. Da du aber nur auf vorhandensein prüfen willst, brauchst du das nicht.

    Kommentar


    • #3
      Re: Problem mit ereg()

      Original geschrieben von Daether
      Hi,
      ich bin neu hier und habe da gleich einmal ein Problem.
      Ich lerne seit 2 Wochen erst PHP, also seid bitte etwas nachlässig mit mir.
      $test = ereg('([a-z])',$wort);
      Da du neu bist, so lerne besser die preg Gruppe. Sie ist unter dem Buchstaben P zu finden (Perl-compatible), die ereg waren unter R (regular).

      Zur sache selber, es fehlt der Quantifier (Wiederholungsangabe) * für 0 oder mehrmals:
      $test = preg_match('#^([a-z]*)$#i',$wort);

      die # sind bei preg_ nötig als zusätzliche 'delimiter'. Es kann auch ein anderes Zeichen sein.
      [edit-edit] Das i heisst egal-ob-gross-klein.
      [edit-edit]mit ^ und $ bindet man den Anfang und das Ende an.
      Zuletzt geändert von heiss; 17.07.2006, 14:37.

      Kommentar


      • #4
        ok,
        erstmal danke für eure Antworten.

        Habe mir jetzt das Tutorial über Reguläre ausdrücke durchgelesen.

        "/[a-z]+/" versteeh ich jetzt nur habe ich ein Problem damit. Wenn ich für $Wort="Test123" und dann preg_match ausführe, bekomme ich ein true zurück, da es ja mindestens einmal einen kleinen Buchstaben aus dem Alphabet gibt. Ich möchte aber versuchen zu überprüfen, ob die Zeichenkette NUR aus [a-z][A-Z] besteht.

        Kommentar


        • #5
          ^ und $ sind deine Freunde.

          ^ bezeichnet den Anfang eines Ausdrucks und $ das Ende.

          Dein regulärer Ausdruck wäre also:

          /^[a-z]+$/



          @heiss: U ist übrigens ungreedy, i steht für "case insensitive"

          Kommentar


          • #6
            Sorry Jungs aber ich glaube nicht dass dies das war was der topicstarter wollte. Ein String der NUR aus Buchstaben besteht
            PHP-Code:
            $reg '/^[a-z]*$/i' 
            Wäre wohl passender
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              wunderbar, danke jahlives.
              Das scheint zu funktionieren, ich finde keine Sonderfall der durch das Muster durchrutscht.
              Nurn ums mal auszuschreiben und zu sehen ob ichs kapiere.
              Also das erste Zeichen muss a-z sein, wegen dem ^.
              dann folgen unendlich viele a-z dank dem *.
              und dank dem $ muss es auf a-z enden.
              i steht dafür, nicht auf Groß und Kleinschreibung zu achten.
              Wen nich alles richtig Verstanden habe geht doch dann das hier für Telefonnummern, oder?


              $test = preg_match('|^[0-9]*/{1}[0-9]*$|i',$wort);
              bsp: 04101/1234567 = true
              Zuletzt geändert von Daether; 17.07.2006, 14:55.

              Kommentar


              • #8
                Schonmal nicht schlecht so - allerdings gibt es keine groß- oder kleingeschriebenen zahlen, also das "i" weglassen.

                Werd dir über den unterschied zwischen * und + klar.

                * KEIN oder beliebig viele Zeichen
                + EIN oder beliebig viele Zeichen


                Der / kann bei deiner Telefonnummer auch fehlen oder ein - sein.

                Kommentar


                • #9
                  PHP-Code:
                  $reg '/^0{1}\\d{4}\\/{0,1}\\d{7}$/' 
                  Ich kenne dt Telefonnummern nicht, aber ich nehme mal an, dass auch Eure Vorwahlen grundsätzlich mit einer 0 beginnen (drum 0 einmal am Anfang), dann 4 Ziffern (müsstest du anpassen falls es auch kürzere gibt), dann der Slash oder eben nicht und dann nochmals 7 Zahlen (was du auch anpassen müsstest falls es auch kürzere gibt)

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    ok,nochmals danke.
                    Habe jetzt die * durch + ersetzt.

                    Die Menge der Zahlen ist mir mometna noch relativ egal, aber danke für den Vorschlag. habe jetzt :
                    PHP-Code:
                    "|^[0-9]+/{0,1}-{0,1}[0-9]+$|i" 

                    Kommentar


                    • #11
                      jetzt werden aber auch zeichenketten mit / UND - zusammen akzeptiert.

                      besser: |^[0-9]+[/-]{0,1}[0-9]+$|'

                      Kommentar


                      • #12
                        habs nochmal entsprechend geändert, garnicht so einfach .
                        Ich habe noch einam eine kleien Frage die ähnlich ist und wollte nicht noch einmal einen neuen ExtraThread dafür aufmachen.
                        Ich verscuhe gerade aus einer Datei jedlichen HTML-Code heraus zu bekommen. Dachte mit preg_replace müsste das gut gehen, aber irgendwas mache ich wieder falsch.
                        PHP-Code:
                        $testarray[0]='abcdefg';
                        $testarray[1]='<td>test</td>';
                        $ersatz '';
                        $suchmuster_zahlen "|<{1}.*>{1}|";
                        $ergebnis preg_replace($suchmuster_zahlen,$ersatz,$testarray);
                        print_r($ergebnis
                        Das Ergebnis ist:
                        Array ( [0] => abcdefg [1] =>)

                        Ich wollte, dass mit gesucht wird nach:
                        <unendlich Zeichen, auch Leerzeichen> und diese durch nichts ersetzt werden.
                        Das Ergebnis sollte eigendlich:
                        Array ( [0] => abcdefg [1] => test ) sein.

                        Kann mir jemand sagen was ich diesmal falsch gemacht habe bei den regulären Ausdrücken?

                        Kommentar


                        • #13
                          htmltags kannst du auch ganz einfach mit strip_tags entfernen, ohne dich jetzt von deinem vorhaben abbringen zu wollen
                          mfg

                          Kommentar


                          • #14

                            wusste nicht das es sowas schönes gibt .
                            Auch wenn ich das hier dann nichtmehr wirklich brauche, würde es mich doch interessieren, was ich falsch gemacht habe.
                            Mag es mir vielleciht trotzdem jemand sagen?

                            Kommentar


                            • #15
                              ich bins nochmal.
                              Hat jemand eine Idee wie ich ein Telefonnummernsuhcmuster aussehen könnte, das folgene fälle erlaubt?
                              222 - 444 / 44
                              222-44444
                              22244444
                              222 444 44
                              222-444-44
                              222-444/44
                              222 - 444-44
                              Halt alles was so aussieht.
                              Irgendwie schaffe ich es nicht ein passendes Suchmuster zu machen.

                              Kommentar

                              Lädt...
                              X