Basiscontroles met regular expressions
Auteur: Twopeak - 26 augustus 2004 - 14:21 - Gekeurd door: Dennisvb - Hits: 10676 - Aantal punten: 4.50 (2 stemmen)
Commentaar staat in script.
Het is meer om van te leren, dan echt te copy pasten!
Ik speel met de gedachte om een php script te maken dat voor jou een regular expression maakt...
|
Code: |
<?
//eventjes duidelijk zeggen, check_email gebruik ik zelf, en werkt 99% vd tijd (er zijn nog adressen die niet ok zijn
//check_url is nooit getest geweest
//check_date komt letterlijk uit de php handboek, zal het morgen performanter maken!
function check_email($string) {
$check_email = "/^([a-z0-9_-]+.)*?[a-z0-9_-]+@([a-z0-9-_]{2,}).[a-z0-9-_]*(.[a-z0-9- _]{2,})*$/i";
if (preg_match($check_email,$string)) {
return true;
} else {
return false;
}
}
/*
UITLEG:
/^([a-z0-9_-]+.)*?[a-z0-9_-]+@([a-z0-9-_]*).[a-z0-9-_]*(.[a-z0-9- _]{2,})*$/i
^ betekent begin van een string, indien ik dit er niet bijzet kan men er een woord voorplaatsen
een aantal karakters (a-z en 0-9 en underscore en een minteken
dan een punt (met de escape backslash ervoor!)
dan een * en een vraagteken, betekenend dat dit meerdere keren kan voorkomen, maar dat het optioneel is!
dan een verplichte reeks van letters, getallen underscore of mintekens
dan een @
dan weer karakters, onbepaald hoeveel
dan weer een punt
dan nog wat rommel, zal morgen wel verder uitleggen, ik zie scheel op die regexp!
*/
function check_url($string) {
$check_url = "/^(http)+(s)?+(://)+[:alpha:]*+(.)?+[:alnum:]*+(.){1}[:alfa:]{2,3}+/+([:punct:]||[:alnum:])+(.)(htm||php||html||asp)$/i";
if (preg_match(,$string)) {
return true;
} else {
return false;
}
}
/*
UITLEG:
/^(http)+(s)?+(://)+[:alpha:]*+(.)?+[:alnum:]*+(.)+[:alfa:]{2,3}+/+([:punct:]||[:alnum:])+(.)(htm||php||html||asp)$/i
^ betekent begin van een string, indien ik dit er niet bijzet kan men er een woord voorplaatsen
(http) vooraan staat er altijd http, tussenhaakjes omdat het duidelijker is om dat te groeperen ipv h+t+t+p+:+/+/
s? (of (s)?) betekend dat er één of geen letter s kan staan
:// logisch
+ om strings samen te voegen
[:alpha:] alfanumeriek teken (letters, en cijfers, hoofd-en kleine letters
* om aante geven dat het er meer dan 1 is (* = onbepaald aantal tekens)
(.) aangezien een punt gebruikt word voor regular expressions, moet ik het punt escapen met een backslash
? omdat er niet altijd een subdomein staat, dus dat punt MOET er niet staan (er is een klein risico dat dit script niet werkt voor http://a.com/ of dergelijke
weer alfanumerieke tekens (dit keer mogen er ook nummers in staan, OPGEPAST! er kan dus geen - in staan, en sommige domeinen hebben dat WEL!
weer lettertekens
{2,3} betekent twee of drie karakters, du extensie is altijd twee of drie karakters (tegenwoordig is er .shop en dergelijke bijgekomen, daarop crasht deze re!
dan een /
dan OFWEL een punctuatie teken (punt komma minteken platte streep, tilde) OFWEL alfanumerieke karakters (alle subdirs zitten hierin vervat!)
dan weer een . (de naam vh bestand zit id vorige opdracht)
en nu de extensie
$ om de string te beindigen
en de i om te zeggen dat het gn verschil maakt of het lower of uppercase is
*/
$datumregexp =" ^[0-9]{1,2}+(-||/|| ){1}+[0-9]{1,2}+(-||/|| ){1}+[0- 9]{2,4}$" ;
function check_date($string) {
if (($timestamp = strtotime($str)) === -1) && (preg_match($datumregexp,$string) {
return false;
} else {
return true;
}
}
/*
dees function kijkt of de datum in xx/xx/xxx past (de / kan ook - zijn)
EN of het een geldige datum is! (dus 99/99/0000 zal niet ok geven)
21 february 2000 zal ook niet ok zijn! Als je dat wel wilt, moet je gewoon de regexp. weglaten!
*/
?>
<? //eventjes duidelijk zeggen, check_email gebruik ik zelf, en werkt 99% vd tijd (er zijn nog adressen die niet ok zijn //check_url is nooit getest geweest //check_date komt letterlijk uit de php handboek, zal het morgen performanter maken! function check_email($string) { $check_email = "/^([a-z0-9_-]+.)*?[a-z0-9_-]+@([a-z0-9-_]{2,}).[a-z0-9-_]*(.[a-z0-9- _]{2,})*$/i"; return true; } else { return false; } } /* UITLEG: /^([a-z0-9_-]+.)*?[a-z0-9_-]+@([a-z0-9-_]*).[a-z0-9-_]*(.[a-z0-9- _]{2,})*$/i ^ betekent begin van een string, indien ik dit er niet bijzet kan men er een woord voorplaatsen een aantal karakters (a-z en 0-9 en underscore en een minteken dan een punt (met de escape backslash ervoor!) dan een * en een vraagteken, betekenend dat dit meerdere keren kan voorkomen, maar dat het optioneel is! dan een verplichte reeks van letters, getallen underscore of mintekens dan een @ dan weer karakters, onbepaald hoeveel dan weer een punt dan nog wat rommel, zal morgen wel verder uitleggen, ik zie scheel op die regexp! */ function check_url($string) { $check_url = "/^(http)+(s)?+(://)+[:alpha:]*+(.)?+[:alnum:]*+(.){1}[:alfa:]{2,3}+/+([:punct:]||[:alnum:])+(.)(htm||php||html||asp)$/i"; return true; } else { return false; } } /* UITLEG: /^(http)+(s)?+(://)+[:alpha:]*+(.)?+[:alnum:]*+(.)+[:alfa:]{2,3}+/+([:punct:]||[:alnum:])+(.)(htm||php||html||asp)$/i ^ betekent begin van een string, indien ik dit er niet bijzet kan men er een woord voorplaatsen (http) vooraan staat er altijd http, tussenhaakjes omdat het duidelijker is om dat te groeperen ipv h+t+t+p+:+/+/ s? (of (s)?) betekend dat er één of geen letter s kan staan :// logisch + om strings samen te voegen [:alpha:] alfanumeriek teken (letters, en cijfers, hoofd-en kleine letters * om aante geven dat het er meer dan 1 is (* = onbepaald aantal tekens) (.) aangezien een punt gebruikt word voor regular expressions, moet ik het punt escapen met een backslash ? omdat er niet altijd een subdomein staat, dus dat punt MOET er niet staan (er is een klein risico dat dit script niet werkt voor http://a.com/ of dergelijke weer alfanumerieke tekens (dit keer mogen er ook nummers in staan, OPGEPAST! er kan dus geen - in staan, en sommige domeinen hebben dat WEL! weer lettertekens {2,3} betekent twee of drie karakters, du extensie is altijd twee of drie karakters (tegenwoordig is er .shop en dergelijke bijgekomen, daarop crasht deze re! dan een / dan OFWEL een punctuatie teken (punt komma minteken platte streep, tilde) OFWEL alfanumerieke karakters (alle subdirs zitten hierin vervat!) dan weer een . (de naam vh bestand zit id vorige opdracht) en nu de extensie $ om de string te beindigen en de i om te zeggen dat het gn verschil maakt of het lower of uppercase is */ $datumregexp =" ^[0-9]{1,2}+(-||/|| ){1}+[0-9]{1,2}+(-||/|| ){1}+[0- 9]{2,4}$" ; function check_date($string) { return false; } else { return true; } } /* dees function kijkt of de datum in xx/xx/xxx past (de / kan ook - zijn) EN of het een geldige datum is! (dus 99/99/0000 zal niet ok geven) 21 february 2000 zal ook niet ok zijn! Als je dat wel wilt, moet je gewoon de regexp. weglaten! */ ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|