Opgaverne i denne uge omhandler regulære udtryk, test af form-variabler og indhentning af data fra fremmede web-sites:
Som altid skal du lægge ine besvarelser på W: drevet
Husk. forbindelse til ITU's netværk.
ereg-kommandoen.Ved bedømmelsen lægges der vægt på at du anvender de anviste filnavne - ellers kan vi ikke finde dine besvarelser.
I denne opgave skal du opskrive forskellige mønstre til brug ved
simpel pattern-matching med regexp-kommandoen.
Følgende mønster genkender alle strenge bestående af nul, et eller
flere tegn der enten er et a eller b eller
en kombination af begge:
^[ab]*$
Bemærk at der startes med ^ og sluttes med
$ således at det sikres, at mønstret skal matche
hele strengen for at strengen er genkendt. Du skal også anvende
^ og $ i dine besvarelser.
Du kan checke dine mønstre med Monster servicen fra forelæsningen.
Eller en ajax version.
Gem din besvarelse i en fil ps5/monster.html i
dit web-bibliotek på ITU's web-server og indsæt et link til
besvarelsen fra din index-side.
Angiv mønstre for nedenstående (bemærk nedenstående er blot eksempler på hvad der skal matche, og ikke en fuldstændig liste):
Følgende strenge skal genkendes: "a", "aa", "askdkdj" og
"as".
Følgende strenge skal ikke genkendes: ";", "", "asdlkfj@&/" og
"232".
Følgende strenge skal genkendes: "a", "dkdjs324", "akd"
og "a348384akldfaslkf".
Følgende strenge skal ikke genkendes: "1", "", ";:dkjd" og "3a".
Følgende strenge skal genkendes: "a", "dkdjs324", "akd",
"a348_384a", "asdf_" og "a_".
Følgende strenge skal ikke genkendes: "1", "", ";:dkjd",
"_" og "_a".
' og
-.
Følgende strenge skal genkendes: "Hans", "Pia Petersen",
"Mc'laren", "Annette Pihl-Hansen" og "42".
Følgende strenge skal ikke genkendes: "" og "Hans
P€etersen".
Følgende strenge skal genkendes: "0", "1", "42" og
"100".
Følgende strenge skal ikke genkendes: "", "a", "01" og
"43d".
navn@firma.land, hvor
Bemærk, at definitionen for en email anvendt her adskiller sig fra definitionen anvendt til forelæsning 6.
Følgende strenge skal genkendes: "n@b.com", "nd#€#@bi.££.ddk",
"big.name@big.com.edu", "name@itu.dk" og
"name@it.edu".
Følgende strenge skal ikke genkendes: "n", "n@big",
"n@big@bon.edu", "n@big.com@" og "to@3".
Alle delopgaver ovenfor tæller med 5 point hver.
I denne opgave skal du implementere en version af body-mass-index exemplet fra tidligere, som ydermere validerer brugerens indtastninger ved brug af regulære udtryk og betingede sætninger (if-sætninger). Brugeren skal præsenteres for brugbare fejlmeddelelser ved ikke-gyldige indtastninger - det er op til dig at afgøre hvilke indtastninger der skal være gyldige.
Gem din besvarelse i filerne bmi.html og
bmi.php i underbiblioteket ps5/ til
dit web-bibliotek på ITU's web-server.
Opgaven går ud på at konstruere en service som indhenter dollarkursen fra et andet web-site og benytter dollarkursen til at beregne antallet af kroner man kan købe for $100 og antallet af dollars man kan købe for kr. 100.
Servicen skal gøre brug af funktionen file_get_contents() fra
forelæsningen til at hente en HTML-side ind i en php-streng (en
sekvens af tegn).
Dollarkursen kan passende hentes fra valutakurser.dk. Følgende URL-adresse giver den nødvendige information i form af en HTML-side med dollarkursen sat i forhold til danske kroner:
http://www.valutakurser.dk/
Her er et udpluk af HTML-koden som ved opgavens konstruktion blev hentet med:
file_get_contents("http://www.valutakurser.dk/")
<select id="fravaluta" style="FONT-SIZE: 10px; WIDTH: 155px; FONT-FAMILY: verdana" name="fravaluta"> <option value="">Vælg valuta</option> <option value="100">Danske Kroner (DKK)</option> <option value="523,8100">Amerika (USD)</option> <option value="465,2900">Australien (AUD)</option> <option value="381,1700">Bulgarien (BGL)</option> <option value="527,1500">Canada (CAD)</option> <option value="1276,0900">Cypern (CYP)</option> ... <option value="11,6900">Filippinerne (PHP)</option>
Vi er interesseret i tallet 523,8100 i HTML-koden, hvilket betyder, at
vi giver 5,23 kr. for USD 1. Her er et passende mønster, som kan
bruges til at matche HTML-koden og binde det ønskede tal til en
php-variabel ved brug af ereg-kommandoen:
$pattern = '([,0-9]+)">Amerika';
Din opgave er at udfylde nedenstående skabelon og gemme resultatet i
filen ps5/dollarkurs.php i dit web-bibliotek på
ITU's web-server:
<?php
# Vi henter indholdet
$html = file_get_contents(...);
# En funktion til det kedelige
function home_page ($title, $body) {
echo ...
}
function my_return_page ($body) {
$now = date("Y-m-d H:i:s");
home_page ("Dollarkursservice - $now",
"<h2>Dollarkursservice</h2>
$body");
}
# Vores pattern
$pattern = '([,0-9]+)">Amerika';
if ( eregi (...,$dollarkurs) ) {
# Vores pattern matcher
$dollarkurs = (double)"$dollarkurs[1]";
$kroner = ...;
$dollars = ...;
my_return_page ("For \$100.00 får du kr. ... <p>
For kr. 100.00 får du \$ ...");
} else {
# vores pattern matcher ikke
my_return_page ("Servicen er ikke tilgængelig! <p>
Send mig venligst <a href=\"mailto:noget@itu.dk\">email</a>.");
}
?>
Indsæt et link til servicen fra din index-side.
Vejledende løsning:
Find og beskriv tre nyttige eksempler på data det kan være interessant
at hente fra et fremmed web-site. Gem beskrivelserne i en fil
ps5/fetch.html i dit web-bibliotek på ITU's
web-server.
Implementer (som for dollarkursservicen) et af de tre eksempler. Gem
din besvarelse i en fil fetch.php i dit web-bibliotek på
ITU's web-server og indsæt et link fra servicen fra filen fetch.html.
^[ab]$ og [^ab]$asfg mønstret asd?fg Hvad med asdfgmyre mønstret ^(d|m)yre$dyre mønstret ^([^d]|m)yre$