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
Annonceindlæg fra Deloitte
06. december 2005 - 20:43
#1
F.eks. sådan: if (preg_match("![^<>'\"*\\]!", $dinTekst)) echo "Ulovlige tegn!"; else echo "Alles is klar!"
06. december 2005 - 21:06
#2
det ser omtrent rigtigt ud, jeg checker den lige der hvor jeg skal bruge den..
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?
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))
06. december 2005 - 21:26
#5
det lyder sandsynligt ... prøver den lige igen..
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.
06. december 2005 - 21:44
#7
! er ikke et negationstegn i denne sammenhæng - det har samme funktion som dine /.../ i dit eget eksempel.
06. december 2005 - 21:45
#8
Jeg kunne også have valgt et helt 3. tegn: preg_match("@[^<>'\"*\\]@",$arg0)) ? false : true;
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å?
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";
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
06. december 2005 - 22:36
#12
nej den virker heller ikke ..
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.
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 ?
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. :^)
06. december 2005 - 23:08
#16
Det gør du bare ... men den virker stadig ikke ... selv uden ^ tegnet.
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>"; }
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
09. december 2005 - 01:29
#19
@[<>'\"*\\\\]@
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.
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
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? :^)
09. december 2005 - 11:59
#23
fair nok gutter, jeg siger tak.
Vi tilbyder markedets bedste kurser inden for webudvikling