Max: URL auf Sytax überprüfen (Regexperweiterung)

Hi Leute,

ich würde gerne eine URL auf Korrektheit überprüfen, habe folgendes REgexp gefunden:

if(!ereg("^([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$",$homepage))
(mit Prüfungs-Routine versehen)

jedoch erkennt das Regexp URLs mit "http://" als invalide an...
Wie bringe ich das "http://" noch mit ein?

Ich danke auch

MfG Max

  1. Ein Thread zu dem Thema reicht: [pref:t=43160&m=235908]
    </faq/#Q-11>
    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  2. Hallo Max,

    ich würde gerne eine URL auf Korrektheit überprüfen, habe folgendes REgexp gefunden:

    if(!ereg("^([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$",$homepage))
    (mit Prüfungs-Routine versehen)

    Das erkennt Dir mit Sicherheit keine gültige URL.

    jedoch erkennt das Regexp URLs mit "http://" als invalide an...

    Natürlich. Er sieht jede gültige URL als invalide an - auch HTTP-URLs.

    Wie bringe ich das "http://" noch mit ein?

    Im Archiv gibt es einen regulären Ausdruck, der Dir jede gültige URL filtert - er ist allerdings 2 KB groß. Suche nach p r o s p e r o (ohne Leerzeichen, ich will die Archivsuche nicht verschmutzen) um ihn zu finden.

    Viele Grüße,
    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
    1. Holladiewaldfee,

      Suche nach p r o s p e r o (ohne Leerzeichen, ich will die Archivsuche nicht verschmutzen) um ihn zu finden.

      Häh? Archivsuche verschmutzen? Muß man das verstehen? Warum die Leerzeichen?

      Alternativ könnte er natürlich auch nach "Wais" suchen :)

      Ciao,

      Harry

      --
        Man weiß erst was man hatte, wenn man es verloren hat.
        42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
      1. Holladiewaldfee,

        Häh? Archivsuche verschmutzen? Muß man das verstehen? Warum die Leerzeichen?

        Äh, hat das was mit (http://selfsuche.teamone.de/cgi-bin/such.pl)

        "Die gesuchte Seite wurde nicht gefunden. Bitte überprüfen Sie die Adresse oder benutzen Sie die angebotene Navigation durch die Seiten von SELFHTML:"

        zu tun? Fragen über Fragen an diesem Samstag, den ich mangels Winterreifen nicht zum Skifahren nutzen kann *hoil*

        Ciao,

        Harry

        --
          Man weiß erst was man hatte, wenn man es verloren hat.
          42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
        1. Hi Harry

          Äh, hat das was mit (http://selfsuche.teamone.de/cgi-bin/such.pl)

          "Die gesuchte Seite wurde nicht gefunden. Bitte überprüfen Sie die Adresse oder benutzen Sie die angebotene Navigation durch die Seiten von SELFHTML:"

          Sag dass den überaus netten Menschen die, kaum sind Ferien, wieder mit Angriffen anfangen.

          Gruss Dani*stinksauer*ela

          --
          Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
          Selfcode: sh:) fo:) ch:) rl:) br:> n4:| ie:{ mo:) va:) de:] zu:} fl:( ss:) ls:&
          1. Holladiewaldfee,

            Sag dass den überaus netten Menschen die, kaum sind Ferien, wieder mit Angriffen anfangen.

            was soll man denn sonst auch machen, als kleiner hilfloser sozial isolierter Freak, wenn man so viele Pickel hat und so schlechte Freunde hat - wenn man überhaupt welche hat -, daß man sich nicht mehr raus trauen kann (raus? In die *argh* Sonne? Igitt, Tageslicht)? Gibt es noch Möglichkeiten, sich neben dem Computer anderweitig zu beschäftigen? Was soll man denn machen, wenn man zuviel jugendlich Aggressivität und Energie übrig hat um einfach nur langweilig Seiten anzuschauen, die man eh alle schon zehnmal gesehn hat? Was tun, wenn die Haut nach 3 Jahren ohne jeden Lichtschimmer so hell geworden ist, daß die Zähne deswegen dunkel aus dem Gesicht hervorstechen? Was tun, wenn die einzige Möglichkeit, sich fortzubewegen a) ein Bürostuhl mit Rollen oder b) auf den Boden legen und selber rollen ist, weil die Beine a) das Gewicht nicht mehr tragen können und b) keinen Plan mehr haben, wofür sie eigentlich da sind? Was machen, wenn konstruktive Arbeit doch nur was für Schleimer und Spießer ist?

            Wie endlos dumm muß man eigentlich sein um bei solchen Aktionen nicht aus Scham vor sich selbst zu sterben?

            Gruss Dani*stinksauer*ela

            Verständlich.

            Ciao,

            Harry

            --
              Man weiß erst was man hatte, wenn man es verloren hat.
              42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
      2. Hallo Harry,

        Häh? Archivsuche verschmutzen?

        Ganz einfach: Wenn ich das Wort normal schreibe, dann taucht _mein_ Posting auch als Suchergebnis für spätere Archivsuchen auf. Das will ich aber nicht, irgendwann geht sonst das "richtige" Posting unter. Das meine ich mit "verschmutzen".

        Viele Grüße,
        Christian

        --
        Hast Du einen Beitrag? Nur her damit!
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
        sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
        1. Holladiewaldfee,

          Ganz einfach: Wenn ich das Wort normal schreibe, dann taucht _mein_ Posting auch als Suchergebnis für spätere Archivsuchen auf. Das will ich aber nicht, irgendwann geht sonst das "richtige" Posting unter. Das meine ich mit "verschmutzen".

          *blink*
          Ah, klar, eigentlich logisch :)
          Danke.

          Ciao,

          Harry

          --
            Man weiß erst was man hatte, wenn man es verloren hat.
            42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
      3. Holladiewaldfee,

        Suche nach p r o s p e r o (ohne Leerzeichen, ich will die Archivsuche nicht verschmutzen) um ihn zu finden.

        Also, nachdem Archivsuche und Archiv grade einen Hänger haben (herzlichen Dank an die bescheuerten Scriptkiddies) poste ich hier einfach mal aus einem von meinen Projekte raus den kompletten Ausdruck. Kann sein, daß da noch'n paar Konstanten von mir rumfliegen, wenn ja sollten sie aber selbsterklären sein. Der "große" Unterschied zu dem Ausdruck im Archiv ist, daß dieser hier theoretisch auch IPv6-Adressen verarbeiten kann, allerdings hat er da noch Schwächen. Aber nachdem das im Endeffekt ja eh bloß Spielerei ist und man da wirklich mit Kanonen auf Spatzen (Spatzen? Mücken!) schiesst, sollte es reichen:


        # Original in Perl    $lcexp_lowalpha       =  "(?:[a-z])";    $lcexp_hialpha        =  "(?:[A-Z])";    $lcexp_alpha          =  "(?:".$lcexp_lowalpha."|".$lcexp_hialpha.")";    $lcexp_digit          =  "(?:\d)";    $lcexp_safe           =  "(?:[$_.+-])";    $lcexp_extra          =  "(?:[!*'(),])";    $lcexp_national       =  "(?:[{}|\\^~[]`])";    $lcexp_punctuation    =  "(?:[<>#%"])";    $lcexp_reserved       =  "(?:[;/?:@&=])";    $lcexp_hex            =  "(?:[\dA-Fa-f])";    $lcexp_escape         =  "(?:%".$lcexp_hex.$lcexp_hex.")";    $lcexp_unreserved     =  "(?:".$lcexp_alpha."|".$lcexp_digit."|".$lcexp_safe."|".$lcexp_extra.")";    $lcexp_uchar          =  "(?:".$lcexp_unreserved."|".$lcexp_escape.")";    $lcexp_xchar          =  "(?:".$lcexp_unreserved."|".$lcexp_escape."|".$lcexp_reserved.")";    $lcexp_digits         =  "(?:\d+)";    $lcexp_alphadigit     =  "(?:".$lcexp_alpha."|\d)";

        # URL schemeparts for ip based protocols: (IP4 and IP6)    $lcexp_urlpath        =  "(?:".$lcexp_xchar.")";    $lcexp_user           =  "(?:(?:".$lcexp_uchar."|[;?&=]))";    $lcexp_password       =  "(?:(?:".$lcexp_uchar."|[;?&=]))";    $lcexp_port           =  "(?:[0-5]?\d\d?\d?\d?|6[0-4]\d\d\d|65[0-4]\d\d|655[0-2]\d|6553[0-5])";  #  $lcexp_ip4part        =  "(?:[01]?\d\d?|2[0-4]\d|25[0-5])";    $lcexp_domain_ip4_part  = "([0-9]|([1-9][0-9])|([1][0-9]{2})|(2))";    $lcexp_domain_ip4_part_last = "([1-9]|([1-9][0-9])|([1][0-9]{2})|(2))";    $lcexp_domain_ip4    = "((".$lcexp_domain_ip4_part."\.){3}".$lcexp_domain_ip4_part_last.")";    $lcexp_domain_ip6_part  = "(0|([1-9a-fA-F][0-9a-fA-F]{0,3}))";    $lcexp_domain_ip6_pure  = "((".$lcexp_domain_ip6_part.":){7}".$lcexp_domain_ip6_part.")";    $lcexp_domain_ip6_short  = "((((".$lcexp_domain_ip6_part.":){1,6})|(:)):((".$lcexp_domain_ip6_part.":){0,5})".$lcexp_domain_ip6_part.")";    $lcexp_domain_ip6   = "(".$lcexp_domain_ip6_pure."|".$lcexp_domain_ip6_short.")";    $lcexp_domain_ip6_4   = "((".$lcexp_domain_ip6_part.":){4}".$lcexp_domain_ip4.")";    $lcexp_domain_ip6_4_short = "(((".$lcexp_domain_ip6_part.":){1,3}|:):(".$lcexp_domain_ip6_part.":){0,2}".$lcexp_domain_ip4.")";    $lcexp_domain_ip    =  "(".$lcexp_domain_ip4."|".$lcexp_domain_ip6."|".$lcexp_domain_ip6_4."|".$lcexp_domain_ip6_4_short.")";    $lcexp_hostnumber     =  $lcexp_domain_ip;  #  $lcexp_hostnumber     =  "(?:(?!0+.0+.0+.0+)(?!255.255.255.255)".$lcexp_ip4part."\.".$lcexp_ip4part."\.".$lcexp_ip4part."\.".$lcexp_ip4part.")";    $lcexp_toplabel       =  "(?:(?:".$lcexp_alpha."(?:".$lcexp_alphadigit."|-)".$lcexp_alphadigit.")|".$lcexp_alpha.")";    $lcexp_domainlabel    =  "(?:(?:".$lcexp_alphadigit."(?:".$lcexp_alphadigit."|-)".$lcexp_alphadigit.")|".$lcexp_alphadigit.")";    $lcexp_hostname       =  "(?:(?:".$lcexp_domainlabel."\.)".$lcexp_toplabel.")";    $lcexp_host           =  "(?:(?:".$lcexp_hostname.")|(?:".$lcexp_hostnumber."))";    $lcexp_hostport       =  "(?:(?:".$lcexp_host.")(?::".$lcexp_port.")?)";    $lcexp_login          =  "(?:(?:".$lcexp_user."(?::".$lcexp_password.")?@)?".$lcexp_hostport.")";    $lcexp_ip_schemepart  =  "(?://".$lcexp_login."(?:/".$lcexp_urlpath.")?)";

        $lcexp_schemepart     =  "(?:".$lcexp_xchar."*|".$lcexp_ip_schemepart.")";    $lcexp_scheme         =  "(?:(?:".$lcexp_lowalpha."|".$lcexp_digit."|[+.-])+)";

        # The predefined schemes:

        # FTP (see also RFC959)    $lcexp_fsegment       =  "(?:(?:".$lcexp_uchar."|[?:@&=]))";    $lcexp_ftptype        =  "(?:[AIDaid])";    $lcexp_fpath          =  "(?:".$lcexp_fsegment."(?:/".$lcexp_fsegment."))";    $lcexp_ftpurl         =  "(?:ftp://".$lcexp_login."(?:/".$lcexp_fpath."(?:;type=".$lcexp_ftptype.")?)?)";

        # FILE    $lcexp_fileurl        =  "(?:file://(?:(?:".$lcexp_host.")|localhost)?/".$lcexp_fpath.")";

        # HTTP    $lcexp_httpuchar      =  "(?:(?:".$lcexp_alpha."|".$lcexp_digit."|".$lcexp_safe."|(?:[!',]))|".$lcexp_escape.")";    $lcexp_hsegment       =  "(?:(?:".$lcexp_httpuchar."|[;:@&=~]))";    $lcexp_search         =  "(?:(?:".$lcexp_httpuchar."|[;:@&=~]))";    $lcexp_hpath          =  "(?:".$lcexp_hsegment."(?:/".$lcexp_hsegment."))";    $lcexp_httpurl        =  "(?:http://".$lcexp_hostport."(?:/".$lcexp_hpath."(?:\?".$lcexp_search.")?)?(?:#".$lcexp_xchar."*)?)";    $lcexp_strict_httpurl =  "(?:http://".$lcexp_hostport."(?:/".$lcexp_hpath."(?:\?".$lcexp_search.")?)?)";

        # GOPHER (see also RFC1436)    $lcexp_gopher_plus    =  "(?:".$lcexp_xchar.")";    $lcexp_selector       =  "(?:".$lcexp_xchar.")";    $lcexp_gtype          =  "(?:".$lcexp_xchar.")";    $lcexp_gopherurl      =  "(?:gopher://".$lcexp_hostport."(?:/".$lcexp_gtype."(?:".$lcexp_selector."(?:%09".$lcexp_search."(?:%09".$lcexp_gopher_plus.")?)?)?)?)";

        # NEWS (see also RFC1036)    $lcexp_article        =  "(?:(?:".$lcexp_uchar."|[;/?:&=])+@".$lcexp_host.")";    $lcexp_group          =  "(?:".$lcexp_alpha."(?:".$lcexp_alpha."|".$lcexp_digit."|[.+_-]))";    $lcexp_grouppart      =  "(?:".$lcexp_article."|".$lcexp_group."|\)";    $lcexp_newsurl        =  "(?:news:".$lcexp_grouppart.")";

        # NNTP (see also RFC977)    $lcexp_nntpurl        =  "(?:nntp://".$lcexp_hostport."/".$lcexp_group."(?:/".$lcexp_digits.")?)";

        # TELNET    $lcexp_telneturl      =  "(?:telnet://".$lcexp_login."(?:/)?)";

        # WAIS (see also RFC1625)    $lcexp_wpath          =  "(?:".$lcexp_uchar.")";    $lcexp_wtype          =  "(?:".$lcexp_uchar.")";    $lcexp_database       =  "(?:".$lcexp_uchar."*)";    $lcexp_waisdoc        =  "(?:wais://".$lcexp_hostport."/".$lcexp_database."/".$lcexp_wtype."/".$lcexp_wpath.")";    $lcexp_waisindex      =  "(?:wais://".$lcexp_hostport."/".$lcexp_database."\?".$lcexp_search.")";    $lcexp_waisdatabase   =  "(?:wais://".$lcexp_hostport."/".$lcexp_database.")";  #  $lcexp_waisurl        =  "(?:".$lcexp_waisdatabase."|".$lcexp_waisindex."|".$lcexp_waisdoc.")";  #  Too many capturing parentheses ... bla ... but ... who the hell uses WAIS with IPv6 ???

        # PROSPERO    $lcexp_fieldvalue     =  "(?:(?:".$lcexp_uchar."|[?:@&]))";    $lcexp_fieldname      =  "(?:(?:".$lcexp_uchar."|[?:@&]))";    $lcexp_fieldspec      =  "(?:;".$lcexp_fieldname."=".$lcexp_fieldvalue.")";    $lcexp_psegment       =  "(?:(?:".$lcexp_uchar."|[?:@&=]))";    $lcexp_ppath          =  "(?:".$lcexp_psegment."(?:/".$lcexp_psegment."))";    $lcexp_prosperourl    =  "(?:prospero://".$lcexp_hostport."/".$lcexp_ppath."(?:".$lcexp_fieldspec."))";

        # Ergebnis    $check_array = Array(  "http"    => "/^".$lcexp_httpurl."$/",          "strict_http" => "/^".$lcexp_strict_httpurl."$/",          "ftp"   => "/^".$lcexp_ftpurl."$/",          "news"    => "/^".$lcexp_newsurl."$/",          "file"    => "/^".$lcexp_fileurl."$/",          "telnet"   => "/^".$lcexp_telneturl."$/",          "nntp"    => "/^".$lcexp_nntpurl."$/",          "gopher"   => "/^".$lcexp_gopherurl."$/",  #        "wais"    => "/^".$lcexp_waisurl."$/",          "wais_doc"  => "/^".$lcexp_waisdoc."$/",          "wais_idx"  => "/^".$lcexp_waisindex."$/",          "wais_db"   => "/^".$lcexp_waisdatabase."$/",          "prospero"   => "/^".$lcexp_prosperourl."$/");

        # Relative Links    if(fcms_bLINKRFCALLOWRELATIVE == true)    { $check_array["hpath"] = "/^".$lcexp_hpath."$/";     $check_array["hsearch"] = "/^".$lcexp_hsearch."$/"; }

        # Validierung    $validated = false;    while(list($protocol, $protregexp) = each($check_array))    { if(preg_match($protregexp, $data["link"]))     { $validated = true;      break; } # Einmal validiert reicht ... -> Spart Rechenleistung    }

        Das war der erste Teil ...

        Ciao,

        Harry

        --
          Man weiß erst was man hatte, wenn man es verloren hat.   42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
      4. Holladiewaldfee,

        so und jetzt zum zweiten Teil, dem Ausdruck für eMail-Adressen, auch gnadenlos aus meinem Projekt rauskopiert. Problem: Mit den Erweiterungen nach RFC 2368 kann er nichts anfangen. Wenn einer Lust hat das zu lösen: Viel Spaß.

        Wie man diesen Ausdruck jetzt auf mailto:-Angaben anwendet darf jeder selber rausfinde, das ist ja nicht sooo schwer ;)


        # Original von J. Friedl und Andre Malo (in Perl)   # (modifiziert von Harald Breitkreutz)   # Added: IPv6-Support   if(!preg_match("/[\200-\377]/", $data["email"]))   {    # RFC 822    $mcexp_esc         = '\\';    $mcexp_Period      = '.';    $mcexp_space       = '\040';    $mcexp_tab         = '\t';    $mcexp_OpenBR      = '[';    $mcexp_CloseBR     = ']';    $mcexp_OpenParen   = '(';    $mcexp_CloseParen  = ')'; #   $mcexp_NonASCII    = '\x80-\xff'; # Eigentlich noch plus \0177 (= /x7f)    $mcexp_NonASCII    = '\x7f-\xff';    $mcexp_ctrl        = '\000-\037';    $mcexp_CRlist      = '\n\015';    $mcexp_qtext       = '[^'.$mcexp_esc.$mcexp_NonASCII.$mcexp_CRlist.'"]';    $mcexp_dtext       = '[^'.$mcexp_esc.$mcexp_NonASCII.$mcexp_CRlist.$mcexp_OpenBR.$mcexp_CloseBR.']';    $mcexp_quoted_pair = $mcexp_esc.'[^'.$mcexp_NonASCII.']';    $mcexp_ctext       = '[^'.$mcexp_esc.$mcexp_NonASCII.$mcexp_CRlist.'()]';    $mcexp_Cnested     = $mcexp_OpenParen.$mcexp_ctext.'(?:'.$mcexp_quoted_pair.$mcexp_ctext.')'.$mcexp_CloseParen;    $mcexp_comment     = $mcexp_OpenParen.$mcexp_ctext."(?:(?:".$mcexp_quoted_pair."|".$mcexp_Cnested.")".$mcexp_ctext.")".$mcexp_CloseParen;    $mcexp_X           = "[".$mcexp_space.$mcexp_tab."](?:".$mcexp_comment."[".$mcexp_space.$mcexp_tab."])";    $mcexp_atom_char   = "[^(".$mcexp_space.')<>@,;:".'.$mcexp_esc.$mcexp_OpenBR.$mcexp_CloseBR.$mcexp_ctrl.$mcexp_NonASCII."]";    $mcexp_atom        = $mcexp_atom_char."+(?!".$mcexp_atom_char.")";    $mcexp_quoted_str  = '"'.$mcexp_qtext."(?:".$mcexp_quoted_pair.$mcexp_qtext.')"';    $mcexp_word        = "(?:".$mcexp_atom."|".$mcexp_quoted_str.")";    $mcexp_domain_ref  = $mcexp_atom;    $mcexp_domain_lit  = $mcexp_OpenBR."(?:".$mcexp_dtext."|".$mcexp_quoted_pair.")*".$mcexp_CloseBR;    $mcexp_sub_domain  = "(?:".$mcexp_domain_ref."|".$mcexp_domain_lit.")".$mcexp_X;

        $mcexp_phrase_ctrl  = "\000-\010\012-\037";    $mcexp_phrase_char  = '[^()<>@,;:".'.$mcexp_esc.$mcexp_OpenBR.$mcexp_CloseBR.$mcexp_NonASCII.$mcexp_phrase_ctrl."]";    $mcexp_phrase      = $mcexp_word.$mcexp_phrase_char."(?:(?:".$mcexp_comment."|".$mcexp_quoted_str.")".$mcexp_phrase_char.")*";

        $mcexp_local_part   = $mcexp_word.$mcexp_X."(?:".$mcexp_Period.$mcexp_X.$mcexp_word.$mcexp_X.")*";

        $mcexp_domain_lang    = $mcexp_sub_domain."(?:".$mcexp_Period.$mcexp_X.$mcexp_sub_domain.")".$mcexp_Period."[A-Za-z][A-Za-z][A-Za-z]?[A-Za-z]?";    $mcexp_route_lang        = "@".$mcexp_X.$mcexp_domain_lang."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_lang."):".$mcexp_X;    $mcexp_addr_spec_lang    = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_lang;    $mcexp_route_addr_lang   = "[<".$mcexp_X."(?:".$mcexp_route_lang.")?".$mcexp_addr_spec_lang.">]";    $mcexp_email_lang        = "(".$mcexp_X."(?:".$mcexp_addr_spec_lang."|".$mcexp_phrase.$mcexp_route_addr_lang."))";

        $mcexp_domain_kurz   = $mcexp_sub_domain."(?:".$mcexp_Period.$mcexp_X.$mcexp_sub_domain.")";    $mcexp_route_kurz        = "@".$mcexp_X.$mcexp_domain_kurz."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_kurz."):".$mcexp_X;    $mcexp_addr_spec_kurz    = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_kurz;    $mcexp_route_addr_kurz   = "[<".$mcexp_X."(?:".$mcexp_route_kurz.")?".$mcexp_addr_spec_kurz.">]";    $mcexp_email_kurz        = "(".$mcexp_X."(?:".$mcexp_addr_spec_kurz."|".$mcexp_phrase.$mcexp_route_addr_kurz."))";

        # RFC 820    $mcexp_domain_ip4_part  = "([0-9]|([1-9][0-9])|([1][0-9]{2})|(2))";    $mcexp_domain_ip4_part_last = "([1-9]|([1-9][0-9])|([1][0-9]{2})|(2))";    $mcexp_domain_ip4    = "((".$mcexp_domain_ip4_part.$mcexp_Period."){3}".$mcexp_domain_ip4_part_last.")";    $mcexp_route_ip4         = "@".$mcexp_X.$mcexp_domain_ip4."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_ip4.")*:".$mcexp_X;    $mcexp_addr_spec_ip4     = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_ip4;    $mcexp_route_addr_ip4    = "[<".$mcexp_X."(?:".$mcexp_route_ip4.")?".$mcexp_addr_spec_ip4.">]";    $mcexp_email_ip4        = "(".$mcexp_X."(?:".$mcexp_addr_spec_ip4."|".$mcexp_phrase.$mcexp_route_addr_ip4."))";

        # RFC 1883    # Please note that IPv6-Checking does not check for reserved adresses.    # This is quite impossible due to restrictions of regular expressions concerning the number of capturing parentheses.    # Also, this pattern still validates adresses like A:B:C:1:2::3:4:5:6, that means shortend forms that do in fact contain    # too many ":". There's no real (say: beautiful) way out of this.    $mcexp_domain_ip6_part  = "(0|([1-9a-fA-F][0-9a-fA-F]{0,3}))";    $mcexp_domain_ip6_pure  = "((".$mcexp_domain_ip6_part.":){7}".$mcexp_domain_ip6_part.")";    $mcexp_domain_ip6_short  = "((((".$mcexp_domain_ip6_part.":){1,6})|(:)):((".$mcexp_domain_ip6_part.":){0,5})".$mcexp_domain_ip6_part.")";    $mcexp_domain_ip6   = "(".$mcexp_domain_ip6_pure."|".$mcexp_domain_ip6_short.")";    $mcexp_route_ip6        = "@".$mcexp_X.$mcexp_domain_ip6."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_ip6.")*:".$mcexp_X;    $mcexp_addr_spec_ip6     = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_ip6;    $mcexp_route_addr_ip6    = "[<".$mcexp_X."(?:".$mcexp_route_ip6.")?".$mcexp_addr_spec_ip6.">]";    $mcexp_email_ip6        = "(".$mcexp_X."(?:".$mcexp_addr_spec_ip6."|".$mcexp_phrase.$mcexp_route_addr_ip6."))";

        $mcexp_domain_ip6_4   = "((".$mcexp_domain_ip6_part.":){4}".$mcexp_domain_ip4.")";    $mcexp_route_ip6_4        = "@".$mcexp_X.$mcexp_domain_ip6_4."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_ip6_4.")*:".$mcexp_X;    $mcexp_addr_spec_ip6_4   = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_ip6_4;    $mcexp_route_addr_ip6_4  = "[<".$mcexp_X."(?:".$mcexp_route_ip6_4.")?".$mcexp_addr_spec_ip6_4.">]";    $mcexp_email_ip6_4       = "(".$mcexp_X."(?:".$mcexp_addr_spec_ip6_4."|".$mcexp_phrase.$mcexp_route_addr_ip6_4."))";

        $mcexp_domain_ip6_4_short  = "(((".$mcexp_domain_ip6_part.":){1,3}|:):(".$mcexp_domain_ip6_part.":){0,2}".$mcexp_domain_ip4.")";    $mcexp_route_ip6_4_short      = "@".$mcexp_X.$mcexp_domain_ip6_4_short."(?:,".$mcexp_X."@".$mcexp_X.$mcexp_domain_ip6_4_short.")*:".$mcexp_X;    $mcexp_addr_spec_ip6_4_short  = $mcexp_local_part."@".$mcexp_X.$mcexp_domain_ip6_4_short;    $mcexp_route_addr_ip6_4_short  = "[<".$mcexp_X."(?:".$mcexp_route_ip6_4_short.")?".$mcexp_addr_spec_ip6_4_short.">]";    $mcexp_email_ip6_4_short       = "(".$mcexp_X."(?:".$mcexp_addr_spec_ip6_4_short."|".$mcexp_phrase.$mcexp_route_addr_ip6_4_short."))";

        # Checks    $check_array = Array();    $check_array["email_lang"] = "/^".$mcexp_email_lang."$/x";    if(fcms_bEMAILRFCALLOWINTRANET==true)     $check_array["email_kurz"] = "/^".$mcexp_email_kurz."$/x";    if(fcms_bEMAILRFCALLOWIP==true)    { $check_array["email_ip"] = "/^".$mcexp_email_ip."$/x";     $check_array["email_ip4"] = "/^".$mcexp_email_ip4."$/x";     $check_array["email_ip6"] = "/^".$mcexp_email_ip6."$/x";     $check_array["email_ip6_4"] = "/^".$mcexp_email_ip6_4."$/x";     $check_array["email_ip6_4_short"] = "/^".$mcexp_email_ip6_4_short."$/x"; }

        # Verschachtelte Kommentare aus der Zeichenkette entfernen:    $mailbackup = $data["email"];    do    { $oldsMail = $data["email"];     $sMail = preg_replace("/([^()]*)/", "", $data["email"]); }    while($oldsMail!=$data["email"]);

        # Validieren    $validated = false;    while(list($protocol, $protregexp) = each($check_array))    { if(preg_match($protregexp, $data["email"]))      $validated = true; }

        $data["email"] = $mailbackup;    $data["valid"] = $validated;   }   else   { # Ungültige Non-Ascii-Zeichen im String !    $data["valid"] = false;   }

        Wer diese Ausdrücke einsetzt und damit Kilowatt-weise Strom für unnötige Überprüfungen verbrät ist natürlich selber schuld.

        Ciao,

        Harry

        --
          Man weiß erst was man hatte, wenn man es verloren hat.   42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
        1. Hallo Harry,

          so und jetzt zum zweiten Teil, dem Ausdruck für eMail-Adressen,

          http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html *scnr*

          Viele Grüße,
          Christian

          --
          Hast Du einen Beitrag? Nur her damit!
          http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
          SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
          sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
          1. Holladiewaldfee,

            http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html *scnr*

            Muahahaha, meiner ist viieeeel komplizierter *g*

            Ciao,

            Har*scnr*ry

            --
              Man weiß erst was man hatte, wenn man es verloren hat.
              42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|
            1. Holladiewaldfee,

              http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html *scnr*

              Äh, jetzt seh ich's erst:
              Laut RFC _soll_ man zwar keine IP-Adressen anstelle des Domainnamens hernehmen, man darf es aber. Und der obige Ausdruck kann mit IPv6 nix anfangen ;)

              (Ok, ok, ich weiß, wer zum Teufel verwendet a) IPs in eMail-Adressen und b) IPv6?)

              Ciao,

              Harry

              --
                Man weiß erst was man hatte, wenn man es verloren hat.
                42? Eher sh:| fo:) ch:] rl:° br:& n4:° ie:% mo:) va:) de:[ zu:) fl:( ss:) ls:[ js:|