Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 1363
samfunnsukritisk
JunkieXL's Avatar
Hei!
Jeg trenger hjelp før jeg river av med de siste hårstråene jeg har igjen.

Det første jeg er interessert i å vite er om man kan sjekke om brukerinput inneholder ugyldige tegn med preg_match i PHP, altså som if(!preg_match(blahblah)), siden jeg nå har blitt tullete av å få den til å fungere og ikke husker noe lenger.

For det andre trenger jeg en regex-sak eller hva det heter som gjør at jeg kan matche store og små bokstaver, tall og tegnene - =?!@:.

Og ja, jeg har googlet det!
One of the good guys
2rs1's Avatar
regex: '([a-zA-Z0-9-=\?!@:\.]+)'
http://regexr.com?2vpkf
Sist endret av 2rs1; 20. januar 2012 kl. 22:18.

Kode

[æøåÆØÅa-zA-Z0-9@\.-=\?!:]+
samfunnsukritisk
JunkieXL's Avatar
Trådstarter
Sitat av 2rs1 Vis innlegg
regex: '([a-zA-Z0-9-=\?!@.]+)'
http://regexr.com?2vpkf
Vis hele sitatet...
Tusen hjertelig takk.
Jeg kom aldri så langt at jeg skjønte noe av den editoren

Men jeg får det fortsatt ikke til å funke :S

Kan noen fortelle meg hvordan jeg skal bruke preg_match() ?
Tror jeg har prøvd det meste til nå..
Sitat av JunkieXL Vis innlegg
Kan noen fortelle meg hvordan jeg skal bruke preg_match() ?
Tror jeg har prøvd det meste til nå..
Vis hele sitatet...

Kode

<?php
$brukerinput = 'streng@=-.:!';

if ( !preg_match('/^[a-zA-Z0-9-=\?!@:\.]+$/', $brukerinput) ) {
	throw new Exception('Brukerinput innholder ugyldige tegn');
}
?>
For å forklare regulæruttrykket: ^ markerer at det er starten på strengen, $ markerer slutten. Det vil si at alle tegnene, fra start til slutt, må passe uttrykket innenfor [], som brukes for å samle en gruppe tegn som er tillatt. Du ser at ? har en backslash foran seg. Det er fordi ? er en del av syntaxen til regexp, og brukes for å gjøre noe valgfritt (null eller fler). Den må derfor escapes for å bli en del av de gyldige tegnene i uttrykket.
Mathias; mener du seriøst å slenge en Exception her? Exception bør vel helst brukes når det er en "system feil" (for eks "fil er ikke skrivbar") og ikke en brukerfeil.
Det var jo også noe å henge seg opp i, da. I eksempelet over var det for det meste ment for å illustrere en feilmelding, altså at inndata ikke stemmer med mønsteret.

Men for å svare på spørsmålet, tja, jeg kunne fint brukt exception i et slikt tilfelle. Det kommer jo litt an på hvordan kodestrukturen er, men når jeg koder på et MVC-rammeverk kan det gi fordeler som dette:

Kode

<?php
try {
	$input = (object) $_POST;
	
	// Valider inn-data
	$this->_validateSubmit($input);
	
	// Send til database
	$this->model->insertNewRow($input);
}
catch (Exception $e) {
	$error = $e->getMessage();
}
?>
Her synes jeg det er veldig greit at hver metode har muligheten til å kaste en exception, og at jeg kun har èn exceptionhandeler for hele kodesnutten.
Hvordan skiller du da de feilmeldingene som er OK å vise offentlig, og feilmeldinger som ikke bør vises offentlig?
Jeg har ofte operert med et eget objekt for feilmeldinger til bruker.

Kode

<?php class Error extends Exception {} ?>
Som du sikkert vet kan man ta i mot flere unntak

Kode

<?php 
catch ( Error $e ) {}
catch ( Exception $e ) {}
?>
Jeg føler at vi går litt off-topic her, og jeg gidder ikke å forklare meg mer i denne tråden. Jeg bruker ofte exception handler til feilmeldinger, og det fungerer fint for meg. Jeg kaster jo selvfølgelig ikke en ny exception som innholder dynamisk info (mysql_error() f. eks) som kan utnyttes til det negative.