Avatar billede mcardle Nybegynder
07. august 2007 - 01:41 Der er 24 kommentarer og
1 løsning

preg_match_all med array

Hej eksperter.

Jeg er ved at lave et script, til oprettelse af en bruger. Jeg skal så have løbet brugerens profiltekst i gennem for grimme ord, som pedofilli osv.

Jeg ville gerne have en slags preg_match_all, så den gennemløber mit array og ser om der er nogle ord der ikke må være.

Hvis der er en næmmere måde, vil jeg da gerne høre.

Hvis nogen kender en god tutorial med regular expressions, kunne jeg godt tænke mig at læse dem.

//mcardle
Avatar billede mstorgaard Praktikant
07. august 2007 - 02:33 #1
Vil du have en censur-funktion eller vil du have tjekket array'et, så du kan forhindre den i at blive gemt?

Hvis du vil have en censur-funktion kan du jo let benytte str_replace, fx:
$from = ('grimt', 'dumt');
$str = str_replace($from, '*CENSUR*', $str);
Avatar billede mcardle Nybegynder
07. august 2007 - 14:28 #2
Jeg vil gerne kigge et array igennem. str_replace(); kan ikke tage arrays ;o)

//mcardle
Avatar billede mcardle Nybegynder
07. august 2007 - 14:29 #3
Eller kan det?

//mcardle
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 14:32 #4
det kan den, i hvert fald i følge http://dk2.php.net/manual/en/function.str-replace.php
Avatar billede mcardle Nybegynder
07. august 2007 - 14:33 #5
Har fundet ud af det.

// Giver: Du skulle spise pizza, øl og is hver dag.
$phrase  = "Du skulle spise frugter, grønsager og fiber hver dag.";
$healthy = array("frugter", "grønsager", "fiber");
$yummy  = array("pizza", "øl", "is");

$newphrase = str_replace($healthy, $yummy, $phrase);

//mcardle
Avatar billede mcardle Nybegynder
07. august 2007 - 14:44 #6
Men som mstorgaard spørger om, så vil jeg gerne gå det igennem og forhindre brugeren i, at fortsætte.

//mcardle
Avatar billede mstorgaard Praktikant
07. august 2007 - 14:51 #7
Er det så noget i retning af det her du leder efter?
(utestet)
<?php
if(preg_match('/^grimt/', $str, $matches) || preg_match('/^grimt/', $str, $matches)) {
  echo 'Det må du vist ikke skrive';
}
?>
Avatar billede mstorgaard Praktikant
07. august 2007 - 14:52 #8
Det skal nok være det her i stedet for:
<?php
if(preg_match('/grimt/', $str, $matches) || preg_match('/grimt/', $str, $matches)) {
  echo 'Det må du vist ikke skrive';
}
?>
Avatar billede mcardle Nybegynder
07. august 2007 - 15:12 #9
Kan grimt ikke være et array. Altså ikke nødvendigvis med preg_match, men bare hvor jeg har:

$badwords = array("grimt_1","grimt_2");
if(en eller anden funktion($badwords,$profileText, $matches)){
  echo "Du må ikke skrive grimt.";
}

//mcardle
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 15:15 #10
næsten.. du kan vidst tjekke en række ord med en regex.
det her skulle finde alle ord der skrives mellem | i ()
preg_match_all('#(grimt1|grimt2|grimt3|grimt4|grimt5)#',$str,$matches)
Avatar billede mcardle Nybegynder
07. august 2007 - 15:19 #11
Der må være en nemmere måde end:

$badwords = array("grimt_1","grimt_2");
$all_words = explode($profileText, " ");

for($i=0;$i<count($badwords);$i++){
  if(in_array($badwords[$i], $all_words)){
    $fejl[] = $badwords[$i];
  }
}

if(count($fejl) > 0){
  die("Du har skrevet et ord du ikke må.");
}

//mcardle
Avatar billede mcardle Nybegynder
07. august 2007 - 15:30 #12
Havde lige håbet på denne her virkede, men nej.

$badWords = array("betale","pedofil","pedofilli");
if(preg_match_all('#(for($i=0;$i<count($badWords);$i++){echo $badWords[$i].'|';})#',$checkText,$matches)){
return "badword";
}

//mcardle
Avatar billede olebole Juniormester
07. august 2007 - 15:32 #13
<ole>

'pedofilli' er da ikke et grimt ord ... heller ikke, hvis det bliver stavet korrekt. 'Momssvindel' og 'spritkørsel' er heller ikke grimme ord ... eller 'voldtægt' for den sags skyld.

Hvad er det helt præcis, du vil?
Vil du tælle de 'grimme' ord?
Vil du fjerne de 'grimme' ord?
Vil du bare vide, om der er brugt 'grimme' ord?

/mvh
</bole>
Avatar billede mcardle Nybegynder
07. august 2007 - 15:39 #14
Ja, jeg vil bare gerne vide om der bliver brugt grimme ord. Desuden skal du ikke bestemme om jeg synes det er grimme ord og eftersom du er nødtil skal spørge om hvad det skal bruges til, kan du da ikke tillade at kommentere det.

Anyways, Jeg har nogle ord, jeg gerne vil se om folk skriver, og så skal jeg have mulighed for at gøre noget.

//mcardle
Avatar billede mcardle Nybegynder
07. august 2007 - 16:03 #15
Jeg har brugt din sw_red_6. Smid et svar ;o)

//mcardle
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:13 #16
bare sørg for at teste det grundigt igennem for jeg er absolut ikke nogen haj til RegEx så det kan sagtens være at det er forkert..
Avatar billede mcardle Nybegynder
07. august 2007 - 16:19 #17
Jeg har rettet det til, så det virker.

preg_match_all('/grimt_1|grimt_2|grimt_3|grimt_4/',$checkText,$matches)
Avatar billede nielle Nybegynder
07. august 2007 - 16:22 #18
Den form virker nu ikke. sw_red_6's oprindelige forslag er det rigtige, men det skal nok tilpasses en lille smule:

preg_match_all('#\b(grimt1|grimt2|grimt3|grimt4|grimt5)\b#', $checkText, $matches)

Og så synes jeg at du skulle tale lidt pænere til folk.
Avatar billede nielle Nybegynder
07. august 2007 - 16:23 #19
Måske endda med en lille ignore-case på:

preg_match_all('#\b(grimt1|grimt2|grimt3|grimt4|grimt5)\b#i', $checkText, $matches)
Avatar billede mcardle Nybegynder
07. august 2007 - 16:30 #20
Hmm, jeg prøvede nu ellers hans forslag og det virkede ikke.

Jeg synes nu ikke det er mig der taler grimt til folk, jeg kritiserer ikke folks stavemåde og skrive fejl. Desuden plejer nu at tale pænt til alle, ellers kan man jo ikke få sådan et forum til at fungerer. ;o)

Men tak for dit forslag, jeg prøver det lige.

//mcardle
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:32 #21
nielle-> du siger bare til så får du pointene eller vi deler dem eller hvad det nu bliver til..
Avatar billede nielle Nybegynder
07. august 2007 - 16:36 #22
mcardle> Jeg sagde ikke at du talte grimt til olebole, kun at du sagtens kunne tale pænere.

sw_red_6> Ingen point til mig for denne her :^)
Avatar billede mcardle Nybegynder
07. august 2007 - 16:39 #23
nielle> Jeg kan ikke ændre på noget jeg ikke ved, du må komme med et eksempel.

//mcardle
Avatar billede nielle Nybegynder
07. august 2007 - 16:46 #24
Ok, men jeg ville nu vælge at bruge preg_match() i stedet for preg_match_all():

Test("alfa beta pædofili gamma");  // Udløser en alert
Test("alfa noget grimt2 beta");  // Udløser en alert
Test("alfa nogetgrimt2 beta");  // Udløser ikke en alert - det er det \b gør

function Test($checkText)
{
    if (preg_match('#\b(pædofili|grimt2|grimt3|grimt4|grimt5)\b#i', $checkText))
    {
        echo "Alert! " . $checkText;
    }
}
Avatar billede grace45 Nybegynder
22. oktober 2010 - 18:42 #25
Hej min kære,
Hvordan har du i dag, jeg håber, at alle er godt med dig. Jeg er ked af at bekymre dig med min Forslag til et forhold med dig, men jeg ved, at du vil imødekomme min anmodning i god tro og forståelse. Jeg har brug for dig i forretningsbetingelser og rådgive. Mit navn er Grace Dabah jeg bare gik gennem din profil har ingen andre muligheder end at lade dig vide, at jeg er interesseret i at have et forhold med dig, vil jeg også gerne vide dig mere, kan du sende en mail til min e-mail adresse (grace_11dabah @ yahoo.com), så jeg kan sende dig flere oplysninger om mig selv inklusive mit billede. Jeg tror, vi kan gå herfra. Men huske på, at kærlighed ikke har nogen farver barriere, ingen uddannelsesmæssige tilbage jorden barriere, ingen socio-økonomiske barrierer, religiøse, sprog, nationalitet eller afstand hindring, det eneste vigtige der er kærlighed. Jeg venter på din mail til min e-mail adresse ovenfor.
Med venlig hilsen,
Miss Grace.
JPG (91KB, 336 x 576)
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