Regular expressions (preg_match)

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

  • Regular expressions (preg_match)

    Hallo,

    Könnte mir jemand bitte bei der folgenden Aufgabe weiterhelfen?

    Man sollte folgende Bedingungen für regulären Audrücken erfüllen:

    1– deutsche und österreichische Postleitzahlen, z.B. D-89000 oder A-5020
    2– englische Uhrzeit, z.B. 6:12 am oder 10:59 pm
    3– eine Versionsnummer, z.B. 2.6.21-rc7 oder 2.4.34
    4– eine 13-stellige ISBN-Nummer, z.B. 978-3-86680-192-9 oder 978-3-16-148410-0
    5– Anfangs-Tag irgendeiner HTML-Überschrift, z.B. <h3> oder <H1>
    6– eine österreichische Telefonnummer, z.B. +43/662/8044-6310
    7– eine VISA-Kreditkartennummer (starten mit einer 4, neue Karten haben 16, alte Karten 13 Zahlen), z.B. 4123123123123
    8– eine MasterCard-Kreditkartennummer (starten mit Zahlen 51 bis 55 und haben 16 Zahlen), z.B. 5112312312312312.
    9– eine beliebige VISA oder MasterCard-Kreditkartennummer (Format siehe vorher)
    10– eine .at email-Adresse, z.B. abcdf@abcdf.abcdf.ac.at
    11– eine IPv4-Adresse, z.B. 141.201.0.1
    12– ein Wort, in dem der Buchstabe e nicht vorkommt, z.B. Plan, Ausdruck

    Einige davon habe ich selbst bearbeitet und funktionieren schon richtig, aber mit Nummern 5,6,9,10 und 12 habe ich Probleme.

    Danke im voraus.

    PHP-Code:
    <?php 

    /*
    ^ Anfang eines Strings
    $ Ende eines Strings
    . ein beliebiges Zeichen
    n?  optional vorhandenes 'n'
    n*  Kein oder mehrfaches Vorkommen von 'n'
    n+  Ein oder mehrere Vorkommen von 'n'
    n{2}  Genau zweifaches Vorkommen von 'n'
    n{2,} Mindestens 2 oder mehrere Vorkommen von 'n'
    n{2,4}  Mindestens 2, höchstens 4 Vorkommen von 'n'
    ()  Klammern für Ausdrücke
    (n|a) Entweder 'n' oder 'a'
    [1-6] eine Zahl zwischen 1 und 6
    [c-h] ein Kleinbuchstabe zwischen c und h (c,d,e,f,g,h)
    [D-H] ein Großbuchstabe zwischen D und H (D,E,F,G,H)
    [^a-z]  kein Vorkommen von Kleinbuchstaben zwischen a und z
    [_a-zA-Z] ein Unterstrich und ein beliebiger Buchstabe des Alphabets
    [:space:] Leerzeichen
    \ Escape-Zeichen, u.a. für ? ' " -
    */

    //Gibt an (alle Fehler und Warnungen), welche PHP-Fehlermeldungen angezeigt werden.
    error_reporting(E_ALL); 

        
    //Prüfung der Daten
    if(isset($_POST['submit']) AND $_POST['submit']=='OK'){ 

    //Prüfe, ob der plz nur gültige Zeichen enthält.
    if(!preg_match('/^A|D-[0-9]{4,5}$/'trim($_POST['plz']))) 
    echo 
    "PLZ ist falsch eingegeben!<br>";

    //Prüfe, ob die englische Uhrzeit nur gültige Zeichen enthält.
    if(!preg_match('/^(0[1-9]|1[0-2]):([0-5][0-9])(am|pm)$/'trim($_POST['uhrzeit']))) 
    echo 
    "Uhrzeit ist falsch eingegeben!<br>";

    //Prüfe, ob die Version nur gültige Zeichen enthält.
    if(!preg_match('^([0-9]{1})([0-9]{1})([0-9]{2})?-([a-z]{2})([0-9]{1})$^'trim($_POST['version']))) 
    echo 
    "Version ist falsch eingegeben!<br>";

    //Prüfe, ob die ISBN nur gültige Zeichen enthält.
    if(!preg_match('^([0-9]{3})-([0-9]{1})-([0-9]{2,5})-([0-9]{3,6})-([0-9]{1})$^'trim($_POST['isbn']))) 
    echo 
    "ISBN ist falsch eingegeben!<br>";

    //Prüfe, ob die HTML-Tag nur gültige Zeichen enthält.
    if(!preg_match('/^<(h|H).{1,6}>$/'trim($_POST['html']))) 
    echo 
    "HTML-Tag ist falsch eingegeben!<br>";

    //Prüfe, ob die Telefonnummer nur gültige Zeichen enthält.
    if(!preg_match('/^[0-9\/+-]+$/'trim($_POST['tel']))) 
    echo 
    "Telefonnummer ist falsch eingegeben!<br>";

    //Prüfe, ob die VISA-Card nur gültige Zeichen enthält.
    if(!preg_match('/^([4]{1})([0-9]{13,16})$/'trim($_POST['visa']))) 
    echo 
    "VISACard-Nummer ist falsch eingegeben!<br>";

    //Prüfe, ob die Master-Card nur gültige Zeichen enthält.
    if(!preg_match('/^5[1-5].{14}$/'trim($_POST['master']))) 
    echo 
    "Master-Card Nummer ist falsch eingegeben!<br>";

    // Prüfe, ob die Email-Adresse gültig ist 
    if(!preg_match('^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}$^'trim($_POST['email']))) 
    $errors[]= "E-mail Adresse ist falsch eingegeben!<br>"

    //Prüfe, ob die beliebige Master- Visa Card nur gültige Zeichen enthält.
    if(!preg_match('/^[4]|[51]|[52]|[53]|[54]|[55].{13,16}$/'trim($_POST['visa-master']))) 
    echo 
    "Visa-Master Nummer ist falsch eingegeben!<br>";

    //Prüfe, ob die IPV4-Nummer nur gültige Zeichen enthält.
    if(!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/'trim($_POST['ipv4']))) 
    echo 
    "IPV4-Nummer ist falsch eingegeben!<br>";

    //Prüfe, ob das Buchstabe "e" vorkommt.
    if(!preg_match('/[^e]$/'trim($_POST['e']))) 
    echo 
    "e!<br>";    
        }   
    else { 

    echo 
    "Kein Fehler";

    echo 
    "<br/>";
    echo 
    "<table width=\"554\" border=\"0\" align=\"center\" bgcolor=\"#99CCFF\">\n"
    echo 
    "<tr>\n"
    echo 
    " <td>\n"
    echo 
    "  <h3>Regular Expressions</h3>\n"
    echo 
    "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\" name=\"re\" accept-charset=\"ISO-8859-1\">\n"
    echo 
    "Deutsche und Österreichische PLZ: <br/>\n"
    echo 
    "<input name=\"plz\" type=\"text\" size=\"15\" maxlength=\"7\" value=\"D-12345\"> <br/><br/>\n"

    echo 
    "englische Uhrzeit: <br/>\n"
    echo 
    "<input name=\"uhrzeit\" type=\"text\" size=\"15\" maxlength=\"8\" value=\"10:22pm\"> <br/><br/>\n"

    echo 
    "Version: <br/>\n"
    echo 
    "<input name=\"version\" type=\"text\" size=\"15\" maxlength=\"30\" value=\"2.6.21-rc7\"> <br/><br/>\n"

    echo 
    "ISBN Nummer: <br/>\n"
    echo 
    "<input name=\"isbn\" type=\"text\" size=\"17\" maxlength=\"17\" value=\"978-3-86680-192-9\"> <br/><br/>\n"

    echo 
    "HTML Überschrift: <br/>\n"
    echo 
    "<input name=\"html\" type=\"text\" size=\"15\" maxlength=\"6\" value=\"<H3>\"> <br/><br/>\n"
     
    echo 
    "österreichische Telefonnummer: <br/>\n"
    echo 
    "<input name=\"tel\" type=\"text\" size=\"17\" maxlength=\"17\" value=\"+43/662/8044-6310\"> <br/><br/>\n"

    echo 
    "VISA-Kreditkartennummer: <br/>\n"
    echo 
    "<input name=\"visa\" type=\"text\" size=\"16\" maxlength=\"16\"  value=\"41231231231235\"> <br/><br/>\n"

    echo 
    "Master-Kreditkartennummer: <br/>\n"
    echo 
    "<input name=\"master\" type=\"text\" size=\"16\" maxlength=\"16\" value=\"5112312312312312\"> <br/><br/>\n"

    echo 
    ".at E-Mail Adresse: <br/>\n"
    echo 
    "<input name=\"email\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"abcdf@abcdf.abcdf.ac.at\"> <br/><br/>\n"

    echo 
    "Visa-Master-Kreditkartennummer: <br/>\n"
    echo 
    "<input name=\"visa-master\" type=\"text\" size=\"16\" maxlength=\"16\" value=\"5112312312312312\"> <br/><br/>\n"

    echo 
    "IPv4-Adresse: <br/>\n"
    echo 
    "<input name=\"ipv4\" type=\"text\" size=\"15\" maxlength=\"15\" value=\"141.201.0.1\"> <br/><br/>\n"

    echo 
    "\"e\" kommt nicht vor: <br/>\n"
    echo 
    "<input name=\"e\" type=\"text\" size=\"15\" maxlength=\"30\" value=\"Plan\"> <br/><br/>\n"
    echo 
    "<input type=\"submit\" name=\"submit\" value=\"OK\" align=\"right\">\n"
    echo 
    "</form>\n"
    echo 
    "</td>\n"
    echo 
    "</tr>\n"
    echo 
    "</table>\n";
    }
    ?>

  • #2
    das sieht mir eiskalt nach »macht mir bitte meine Hausaufgaben« aus.
    Bitte Beachten.
    Foren-Regeln
    Danke

    Kommentar


    • #3
      Zitat von Wyveres Beitrag anzeigen
      das sieht mir eiskalt nach »macht mir bitte meine Hausaufgaben« aus.
      Das ist aber echt blöd, wenn ich so gedacht hätte, hätte ich nur fragen hier gestellt und nach lösungen gesucht. Wenn du menen Beitrag richtig gelesen hast, steht dort nicht das Wort "lösen" sondern "weiterhelfen". Ausserdem ist es hier nicht PHP Forum? Kann man hier nicht fragen was man (im Rahmen der PHP) will? Deinen Beitrag könntest du dir sparen.


      PS: ADMIN oder MOD löschen Sie bitte meine Mitgliedschaft hier.

      Danke.

      Kommentar


      • #4
        Zitat von nasil122002 Beitrag anzeigen
        5– Anfangs-Tag irgendeiner HTML-Überschrift, z.B. <h3> oder <H1>
        6– eine österreichische Telefonnummer, z.B. +43/662/8044-6310
        9– eine beliebige VISA oder MasterCard-Kreditkartennummer (Format siehe vorher)
        10– eine .at email-Adresse, z.B. abcdf@abcdf.abcdf.ac.at
        12– ein Wort, in dem der Buchstabe e nicht vorkommt, z.B. Plan, Ausdruck
        Als Ansatz:
        5: <h\d> mit Modifier i
        6: \+\d{2}\/\d{3}\/\d{4}\-\d{4}
        9: Ausdruck-von-7|Ausdruck-von-8, geht natürlich auch kürzer …
        10: [gültige-Zeichen-eines-Localpart]+@[gültige-Zeichen-einer-Domain-ohne-TLD]{2,}\.at, sowas findet man aber auch im Web!
        12: [A-D,F-Z][a-d,f-z]+

        Kommentar


        • #5
          Zitat von onemorenerd Beitrag anzeigen
          Als Ansatz:
          5: <h\d> mit Modifier i
          6: \+\d{2}\/\d{3}\/\d{4}\-\d{4}
          9: Ausdruck-von-7|Ausdruck-von-8, geht natürlich auch kürzer …
          10: [gültige-Zeichen-eines-Localpart]+@[gültige-Zeichen-einer-Domain-ohne-TLD]{2,}\.at, sowas findet man aber auch im Web!
          12: [A-D,F-Z][a-d,f-z]+
          5: if(!preg_match('<h\d>i', trim($_POST['html'])))
          6: if(!preg_match('/^\+\d{2}\/\d{3}\/\d{4}\-\d{4}$/', trim($_POST['tel'])))
          9: if(!preg_match('/^([4]{1})([0-9]{13,16})|5[1-5].{14}$/', trim($_POST['visa-master'])))
          10: if(!preg_match('/^[A-z0-9_]+[@][A-z0-9_]+([.][A-z0-9]+){2,}\.at$/', trim($_POST['email'])))
          12: if(!preg_match('/^(^[A-D,F-Z]|[a-d,f-z])+[a-d,f-z]+$/', trim($_POST['e_Wort'])))

          Danke für die Hilfe.

          Kommentar


          • #6
            Hallo,

            bei 5. musst du noch die Begrenzer ergänzen. < und > sind zwar gültige RegEx-Begrenzer und du hättest sie auch richtig verwendet, aber dann findest du damit den Buchstaben h mit Nummer dahinter und nicht unbedingt nur HTML-Tags.

            Lösung: "/<h\\d>/i"

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar

            Lädt...
            X