RegEX URL Validierung

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

  • 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
    Last edited by crisdoe; 20-04-2003, 21: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

    Comment


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

      Comment


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

        Comment


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

          Comment


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

            Comment


            • #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
              Last edited by MelloPie; 21-06-2003, 13:41.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Comment


              • #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!
                Last edited by TobiaZ; 21-06-2003, 13:45.

                Comment


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

                  Comment

                  Working...
                  X