[REGEX] Was stimmt hier nicht?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [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
    Last edited by Bersi667; 18-04-2008, 08: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!

    Comment


    • #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

      Comment


      • #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!

        Comment


        • #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

          Comment


          • #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

            Comment


            • #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

              Comment


              • #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

                Comment


                • #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

                  Comment


                  • #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

                    Comment


                    • #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

                      Comment


                      • #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

                        Comment


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

                          Comment

                          Working...
                          X