Eregi-Problem

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

  • Eregi-Problem

    Hallo,

    ich habe ein Problem mit der korrekten RegExp-Syntax für die Erkennung einer URL. Ich möchte überprüfen, ob ein eingegebener String im korrekten Format ("http://www.url.de/verzeichnis/verzeichnis/[...]/verzeichnis") ist. Es darf keine Datei angegeben werden (http://www.abcdefg.de/ordner/datei.html). Https-Verbindungen sollen auch möglich sein. Alle Versuche, bereits gepostete REGExps umzuschreiben haben leider zu nichts geführt, da ich in diesem Gebiet noch nicht viel Ahnung habe ;-). Ich lege keinen Wert auf die Überprüfung der vorkommenden Zeichen in der URL (aber auch nicht schlimm, wenn vorhanden), etc., nur das Format sollte überprüft werden.

    Das sollte nach Möglichkeit dann alles so aussehen:

    PHP-Code:
    if ( !eregi($pattern$string) ) {
        echo 
    "Falsches Format!";
    } else {
        echo 
    "Format OK!";

    Vielen Dank schon mal

    Grüße

    Felix
    Hello World

  • #2


    ich benutze so was ähnliches zum verlinken von urls, die im text stehen. ich habe das mal umgeschrieben. müsste sogar funktionieren. habs aber nicht getestet.

    Code:
     if (eregi("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i",$deinstring)) {
       echo "ok";
     }
     else {
       echo "du depp, machs richtig .. :D";
     }
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      zum vergleich mal das original....

      Code:
          /* Hier macht er erst mal vor allen ein http://  */
          $msg = str_replace("http://www","www",$msg);
          $msg = str_replace("www","http://www",$msg);
      
          /* Hier wird aus einer http:// Adresse ein HTML Link gemacht */
          $msg = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<A TARGET=\"_blank\" HREF=\"/redir.php?link=$1\">$1</A>", $msg);
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Vielen Dank,

        leider funktioniert das nur irgendwie nicht. http://www.domain.de wird als falsch deklariert!

        Grüße

        Felix
        Hello World

        Kommentar


        • #5
          mache mach die beiden slashes und das i am ende zum test weg.

          kann sein, dass ereg das nicht braucht.

          Code:
           if (eregi("([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])",$deinstring)) {
             echo "ok";
           }
           else {
             echo "du depp, machs richtig .. ";
           }
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Ah, ok. funktioniert!

            Vielen Dank! Jetzt hab ich ne Basis, auf der ich weiterarbeiten kann ;-)...

            Grüße

            Felix
            Hello World

            Kommentar


            • #7
              ok.
              bin mir aber nicht ganz sicher, wie das ist, wenn hinten nich datei.html oder sowas dransteht. teste das auch erstmal bevor du weitermachst.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Ich hab das ganze mal umgestellt:

                $url = parse_url($config["value"]);

                $pattern = '(^www\.)?([-a-z]+)([\.])([a-z]{1,5})';

                if (eregi($pattern, $url["host"])) {
                echo "HOST OK<BR>\n";
                }


                Irgendwie scheint der Pattern falsch zu sein.

                "http://www.testtesttest" lässt er zu, obwohl er eigentlich eine Endung (z.B. ".de") verlangen müsste.

                Sieht jemand den Fehler in der RegExp oder hat jemand eine, die mir den Host validieren kann?

                Grüße,

                Felix
                Hello World

                Kommentar


                • #9
                  Soo, nur wens interessiert, so sieht das ganze jetzt aus (es scheint jetzt zu funzen):
                  PHP-Code:
                  $protocol false;
                                  
                  $host false;
                                  
                                  
                  $url parse_url($config["value"]);
                                  
                                  
                  # check the protocoll
                                  
                  if ( ($url["scheme"] == "http") OR ($url["scheme"] == "https") ) {
                                      
                  $protocol true;
                                      echo 
                  "PROTOCOL OK<BR>\n";
                                  }
                                  
                                  
                  # check the host
                                  
                  $pattern "((www\.)([a-z0-9-\.]+)([\.][a-z0-9-]{1,5})+$)";
                                  if (
                  eregi($pattern$url["host"])) {
                                      echo 
                  "HOST OK<BR>\n";
                                      
                  $host true;
                                  }
                                  
                                  if (  !(
                  $protocol && $host) ) {
                                      echo 
                  "URL-Format fehlerhaft!";
                                  } 
                  Vielen Dank deine Hilfe Abraxax!

                  Grüße

                  Felix
                  Hello World

                  Kommentar

                  Lädt...
                  X