[REGEX] Was stimmt hier nicht?

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

  • [REGEX] Was stimmt hier nicht?

    Hallo, unten findet Ihr mal eine Methode, das Problem ist, dass auch die TLD muse erkannt und durchgelassen wird, aber keine Links ala

    http://php-resource.de/forum/newthre...read&forumid=3

    PHP-Code:
    public static  function makeLink($string) {
            
    $string ereg_replace("mailto:","",$string);
            
    $string ereg_replace("http://","",$string);
            
    $string preg_replace("#([a-zA-Z0-9_-]+)(\.{1})([a-zA-Z0-9_-]+)(\.{1})([a-z]{2,2}|com|net|
            biz|org|edu|int|pro|cat|gov|mil|tel|mobi|jobs|coop|info|aero|arpa|name|asia|travel|museum$/)
            (.*)#"
    ,"http://\\1\\2\\3\\4\\5\\6",$string);
        
            
    $pattern_mail ='#([_\.0-9a-zA-Z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})#i';    
            
    $pattern_http '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
        
            
    $string preg_replace($pattern_mail,'<a href="mailto:\\1">\\1</a>',$string);
            
    $string preg_replace($pattern_http,"\\1<a href=\"\\2\\3\" class=\"ExternalLink\">\\2\\3</a>\\4",$string);
            
    $string self::nl2br($string);
            return 
    $string;
        } 

    Vielleicht findet ja jemand von euch den Fehler
    Zuletzt geändert von Bersi667; 18.04.2008, 09:58.
    Musik beflügelt unseren Geist

  • #2
    kann dir leider nicht helfen, da die rechte hälfte deines posts hinter einem hässlichen scrollbalken steckt.

    erstmal code umbrechen.
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Vielleicht beschreibst du mal, was du erreichen willst, und was nicht geht. Ich sehe in den REGEX zwar ein paar Unschönheiten, aber keine Fehler. Aber das ist natürlich vom Ziel abhängig.
      Gruss
      H2O

      Kommentar


      • #4
        ich würd sagen das dollarzeichen ist falsch, da es nomalerweise das ende makiert.

        zudem ist nen punkt ein beliebiges zeichen und kein punkt
        Die Milch bleibt ranzig!

        Kommentar


        • #5
          Ok, zur Erklärung, was ich möchte:

          Die Funktion wird ausgeführt, wenn Benutzer einen Kommentar hinterlassen möchten! Es sollen Links automatisch gesetzt werden und zwar, wenn die Zeichenketten: http:// , ftp:// , mailto: , www.bla.com gefunden werden! Diese werden dann automatisch um ein <a href="$link" class="ExternalLink">$link</a> gewrapped!

          Mehr ists eigentlich nicht, das Problem, was ich habe ist: Es sollen alle 2!-stelligen TLD durchgelassen werden, alle weiteren werden extra geprüft, also sämtliche TLD's die länger als 2 Zeichen sind, werden oben aufgelistet, genau da steckt auch der Fehler, die Zeichenkette www.louvre.muse wird erkannt, obwohl sie eigentlich nicht ins raster passen dürfte!

          Desweiteren tritt ein Fehler auf, wenn der Link mit voranstehendem http:// angegeben wird, dieses wird dann gelöscht und es entsteht kein Link! Ich find den Fehler einfach nicht...

          EDIT:
          Das Problem, dass Links mit Parametern nicht erkannt werden ist behoben
          Musik beflügelt unseren Geist

          Kommentar


          • #6
            Die Fehler hat RanzigeMilch ja schon genannt. Der korrigierte Ausdruck wäre dann
            Code:
            #([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9_-]+)(\.)([a-z]{2}|com|net|biz|org|edu|int
            |pro|cat|gov|mil|tel|mobi|jobs|coop|info|aero|arpa|name|asia|travel|museum)(/?.*)#Ui
            Gruss
            H2O

            Kommentar


            • #7
              Ja, das hatte ich auch schon selbst rausgefunden!
              Das Problem ist ja viel mehr, dass der Check nach den benannten TLD's also, travel, museum usw. nicht passt!

              Es wird halt auch .muse durchgelassen und die Domain kenn ich nocht nicht
              Musik beflügelt unseren Geist

              Kommentar


              • #8
                Ok, habe ich auch übersehen, der Ausdruck muss natürlich am Ende begrenzt werden, entweder Ende, Parameter oder Subdirectory:
                Code:
                 #([a-zA-Z0-9_-]+)(\.)([a-zA-Z0-9_-]+)(\.)([a-z]{2}|com|net|biz|org|edu|int|pro|cat|gov|mil|tel|
                mobi|jobs|coop|info|aero|arpa|name|asia|travel|museum)($|[/\?].*$)#Ui
                Was du damit nicht verhindern kannst, ist dass www.louvre.mu true ist.
                Gruss
                H2O

                Kommentar


                • #9
                  Jo, danke... dummer fehler!

                  Ja, das domain.mu durchgeht ist ja klar, ich habe aber auch keine lust sämtliche länderspezifischen TLD's da reinzupacken, wird dann ein wenig oversized!

                  Aber schließlich ist .mu ja eine TLD und zwar von Mauritius, glaub ich!

                  Danke für eure Hilfe!
                  Dennis
                  Musik beflügelt unseren Geist

                  Kommentar


                  • #10
                    Um zu prüfen ob eine Domain exitsiert könntest du auch ein whois auf Systemebene machen ... mal so als erweiterter Denkansatz
                    [FONT="Helvetica"]twitter.com/unset[/FONT]

                    Shitstorm Podcast – Wöchentliches Auskotzen

                    Kommentar


                    • #11
                      Also eine whois-Abfrage ist für eine String2Link-Funktion nun wirklich oversized, käme natürlich in Frage, wenn ich es ganz genau wissen müsste, möchte aber nur möglichen quatsch aussortieren und nicht bei jedem Kommentar der gepostet wird eine whois machen!
                      Musik beflügelt unseren Geist

                      Kommentar


                      • #12
                        Original geschrieben von Bersi667
                        Also eine whois-Abfrage ist für eine String2Link-Funktion nun wirklich oversized
                        Ich hab ehrlich gesagt auch nur deinen letzten Post hier gelesen
                        [FONT="Helvetica"]twitter.com/unset[/FONT]

                        Shitstorm Podcast – Wöchentliches Auskotzen

                        Kommentar


                        • #13
                          ok, es sei dir verziehen
                          Musik beflügelt unseren Geist

                          Kommentar

                          Lädt...
                          X