Avatar billede mads_ms Nybegynder
06. december 2005 - 20:39 Der er 22 kommentarer og
1 løsning

preg_match der udelukker nogle tegn

Hejsa

Jeg har brug for en preg_match der udelukker følgende tegn:

<> ’ ” * \

preg_match skal vel så bare have et ! foran for at den afviser de tegn man angiver i den, istedet for man angiver hvilke tegn man accepterer.. går jeg ud fra.

På forhånd tak
Avatar billede nielle Nybegynder
06. december 2005 - 20:43 #1
F.eks. sådan:

if (preg_match("![^<>'\"*\\]!", $dinTekst))
    echo "Ulovlige tegn!";
else
    echo "Alles is klar!"
Avatar billede mads_ms Nybegynder
06. december 2005 - 21:06 #2
det ser omtrent rigtigt ud, jeg checker den lige der hvor jeg skal bruge den..
Avatar billede mads_ms Nybegynder
06. december 2005 - 21:15 #3
hmmm.... den ser ud til at fejle på alt nu.... den validerer på et textarea, men den er ikke lige pakket ind i en if sætning som din.

sådan her så den gamle ud:
preg_match("/^[0-9A-Za-zæøåÆØÅéÉáÁ.\/,!&()=?+-_@£$:;<>\s]+$/",$arg0)) ? true : false;

Og sådan her ser dit forslag ud:
preg_match("![^<>'\"*\\]!",$arg0)) ? true : false;


men den nye ser ud til at brokke sig over alt ! både ulovlige og lovlige tegn.

any ideas?
Avatar billede nielle Nybegynder
06. december 2005 - 21:20 #4
Er du ikke sikker på at det skulle være:

preg_match("![^<>'\"*\\]!",$arg0)) ? false : true;

I øvrigt kan det tænkes at du også skal escape '*':

preg_match("![^<>'\"\*\\]!",$arg0))
Avatar billede mads_ms Nybegynder
06. december 2005 - 21:26 #5
det lyder sandsynligt ... prøver den lige igen..
Avatar billede mads_ms Nybegynder
06. december 2005 - 21:40 #6
jeg har nu prøvet den nye med ekstra escape karakter .. det hjælper ikke. Jeg prøvede at bytte om på true og false som du foreslog, men det gjorde bare at den pludselig accepterede alt, modsat før hvor den afslog alt.

Der må næsten være noget galt med den preg_match

jeg prøvede også at fjerne negations tegnet (!) da jeg byttede om på true og false .. det virkede heller ikke.
Avatar billede nielle Nybegynder
06. december 2005 - 21:44 #7
! er ikke et negationstegn i denne sammenhæng - det har samme funktion som dine /.../ i dit eget eksempel.
Avatar billede nielle Nybegynder
06. december 2005 - 21:45 #8
Jeg kunne også have valgt et helt 3. tegn:

preg_match("@[^<>'\"*\\]@",$arg0)) ? false : true;
Avatar billede nielle Nybegynder
06. december 2005 - 21:50 #9
Har du prøvet med en streng som indeholder præcist et ulivligt tegn - og intet andet? Og omvendt. Hvad sker der så?
Avatar billede nielle Nybegynder
06. december 2005 - 22:01 #10
Prøv lige dette i syedet:

if (preg_match("@[<>'\"\*\\]@",$arg0))
    echo "Mindst et ulovligt tegn";
else
    echo "Ingen ulovlige tegn";
Avatar billede mads_ms Nybegynder
06. december 2005 - 22:06 #11
okay den prøver jeg lige .... til det med 1 ulovligt tegn: jeg har også en der checker at inputtet er mindst 60 karakterer, så men jeg har prøvet med kun ulovlige tegn .. der var ingenting
Avatar billede mads_ms Nybegynder
06. december 2005 - 22:36 #12
nej den virker heller ikke ..
Avatar billede nielle Nybegynder
06. december 2005 - 22:44 #13
Hvad gørden? Hvad gør den ikke? Hvad forventede du den skulle gøre?

Da jeg ikke kan se hvad du laver er jeg nødt til at have den slags info hvis jeg skal kunne hjælpe.
Avatar billede mads_ms Nybegynder
06. december 2005 - 22:58 #14
I bund og grund er det nøjagtig det samme problem som har været med dem alle sammen: Den kommer aldrig og siger at der er ulovlige tegn.

Dit sidste bud af 22:01:39 har jeg prøvet at sætte ind på en test side, for at isolere den fra den kontekst den skal indgå i.

Den side ser således ud:

<?

$value = "*"; //værdien her indeholder et ulovligt tegn

if (preg_match("@[^<>'\"*\\]@",$value))
    echo "Mindst et ulovligt tegn";
else
    echo "Ingen ulovlige tegn";

?>

resultatet af dette er at ligegyldigt hvad jeg indsætter i $value så siger den "Ingen ulovlige tegn".

Er du enig i at jeg kan teste den på denne måde ?

og i så fald, kan du lave en der virker ?
Avatar billede nielle Nybegynder
06. december 2005 - 23:04 #15
Hov, læg lige mærke til at jeg har fjernet ^-tegnet:

if (preg_match("@[<>'\"\*\\]@",$arg0))

- i stedet for:

if (preg_match("@[^<>'\"*\\]@",$value))

Umiddelbart så burde det virke. Hvis ikke så bliver jeg nok nødt til at kigge på det igen i morgen med nogle friske øjne. G' nat for i dag. :^)
Avatar billede mads_ms Nybegynder
06. december 2005 - 23:08 #16
Det gør du bare ... men den virker stadig ikke ... selv uden ^ tegnet.
Avatar billede nielle Nybegynder
08. december 2005 - 21:42 #17
Det fatter jeg ikke - det burde altås virke. Desværre har jeg ikke selv et PHP-miljø lige i øjeblikket, men jag har da testet efter i andre sprog...

Fortæl mig lige: Hvad får du ud af at køre denne stump testkode?

$testArr = array("<", ">", "'", "\"", "*", "\\", "a", "ab*cd");

foreach ($testArr as $test)
{
    echo $test . " - ";
    echo (preg_match("@[<>'\"*\\]@", $test)) ? "mindst et ulovligt tegn" : "lutter lovlige tegn";
    echo "<br>";
}
Avatar billede mads_ms Nybegynder
09. december 2005 - 00:06 #18
der får jeg:

< - lutter lovlige tegn
> - lutter lovlige tegn
' - lutter lovlige tegn
" - lutter lovlige tegn
* - lutter lovlige tegn
\ - lutter lovlige tegn
a - lutter lovlige tegn
ab*cd - lutter lovlige tegn
Avatar billede plx Nybegynder
09. december 2005 - 01:29 #19
@[<>'\"*\\\\]@
Avatar billede mads_ms Nybegynder
09. december 2005 - 01:52 #20
We have a winner !!

plx -> poster du det lige som et svar, så du kan få dine point?

nielle -> ellers tak for hjælpen.
Avatar billede plx Nybegynder
09. december 2005 - 02:23 #21
Bare giv dem til nielle, han lavede alt forarbejdet

Jeg tror bare han havde stirret sig blind på den. \\\\ bliver til \\ når php afleverer strengen til preg_match, og ] bliver dermed ikke escaped

Havde du kørt med en php opsætning som rapporterede fejl, så havde du også fået en fejlmeddelse, da [ aldrig blev lukket igen
Avatar billede nielle Nybegynder
09. december 2005 - 07:02 #22
plx> Escaping kan være en bitch. Specielt hvis der det skal gøres flere grange i træk af hensyn til det første og så det efterfølgende og så det efterfølgende system. :^|

Skal vi ikke bare dele på denne her? :^)
Avatar billede mads_ms Nybegynder
09. december 2005 - 11:59 #23
fair nok gutter, jeg siger tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester