RegEX URL Validierung

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

  • RegEX URL Validierung

    hallo,
    mit folgendem regex überprüfe ich eingegebene urls:
    PHP-Code:
    /// Validierung URL 
        
    $valide_url "/^([w]{3})+\.([a-zA-Z0-9-]+\.)+([a-zA-Z]{2}|com|edu|gov|int|mil|net|org|shop|aero|biz|coop|info|museum|name|pro)$/i";
        if (!empty(
    $url) && !preg_match($valide_url$url))
        echo 
    "Dies ist keine gültige URL."
    urls im stile von www.test.de oder www.blablabla.blubb.info sind kein problem!
    urls mit vorangestellten http:// o.ä. sowie alles nach der .tld im stile von:
    /ordner/index.php?site=action o.ä. führen mit obigen code zu einem "Dies ist keine gültige URL." - logisch!

    ... ich versuche jetzt seit geraumer zeit diese beiden fehlenden bedingungen in den code einzubauen, leider ohne erfolg!
    1. bei angabe von http:// usw. sollte der regex dies auch checken
    folgenden ansatz hatte ich: (https?://|ftp://|news://)
    2. alles was noch der .tld kommt sollte ingnoriert oder aber validiert werden.

    ... vielleicht ´wisst ihr rat
    Zuletzt geändert von crisdoe; 20.04.2003, 22:59.

  • #2
    Also mal ausem Bauch geschossen:
    häng hinten nach den tlds ein
    \?[.*]? an
    vorne evt:
    ((http(s)?|news|ftp)://)?
    wobei dein [w]{3}+. auch net gut is, es gibt auch ww7.irgendwas.de
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      evt
      Code:
      // isValidUrl checks for valid url address
      function isValidUrl($url){
          return preg_match("#^((http(s)?|ftp|news)://)+[\w\d\.@_-]*[\w\d@_-]+\.([\w]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|shop)[\w\d@\/\%\#\~\.\?=&,;_-]*$#i",$url);
      }
      hab jetzt nur news, ftp, http, https protokolle genommen...
      ein ausgiebiger Test steht noch aus...
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        ... ja das sieht schon mal sehr gut aus

        ich habe meine obige regEX dementsprechend ein wenig ausgebaut,
        folgendes benutze ich um die möglichen www, ww7, www8 der url zu berücksichtigen:
        ([w]{3}|[w]{2,3}+[0-9])

        die vorangestellte http:// usw werden ja so überprüft:
        ((http(s)?|ftp|news)://)

        Frage: wie mache ich das ((http(s)?|ftp|news)://) optional, so das dieser part nicht ungültig wird falls nur das www usw angegeben wird?



        gruss und thx,
        crisdoe

        Kommentar


        • #5
          was ist mit subdomains? lass die www weg
          bsp
          http://news.cnn.com
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            @Mello:
            welche ist denn jetzt die ideale?

            Kommentar


            • #7
              ich glaube die oben genannte funktionmist net schlecht allerdings habe ich festgestellt dass\w nicht gut ist man sollte lieber a-z nehmen da \w auch ß beinhaltet wobei \ auch \d beinhaltet wenn man aber \w durch a-z ersetzt muss man \d wieder benutzen...
              Also zusammengefasst:
              Code:
              // isValidUrl checks for valid url address
              function isValidUrl($url){
                  return preg_match("#^((http(s)?|ftp|news)://)+[a-z\d\.@_-]*[a-z\d@_-]+\.([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|shop)[a-z\d@\/\%\#\~\.\?=&,;_-]*$#i",$url);
              }
              Gegenbeispiele willkommen
              Zuletzt geändert von MelloPie; 21.06.2003, 14:41.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                an son langes pattern komme ich sicher nicht ran. meine Kenntnisse und Ideen sind dafür zu rar.

                Hab mal versucht das alte Pattern mit nem preg_replace einzusetzen. leider kam da aber nichts bei rum. Ne Ahnung?

                EDIT:
                Logisch! Hab jetzt erst gecheckt, dass bei deinem Pattern ja der gane Str. ne URL sein muss. ich änder das bei mir!
                Zuletzt geändert von TobiaZ; 21.06.2003, 14:45.

                Kommentar


                • #9
                  Klappt wunderbar! Bin sehr zufrieden.

                  Was zu überlegen ist:
                  Meinst du es wäre vielleicht sinnvoll urls ohne http, etc zu akzeptieren, jedoch dann automatisch ein http:// davor zusetzen?

                  Naja, ein TRUE/FALSE wäre dann aber nichtmehr so gut möglich.

                  BTW: Hab ich dich im ICQ?

                  Kommentar

                  Lädt...
                  X