Jeg sliter med å få til en sak som nesten er identisk med eksempel på
php.net.
Skal lage til en "textarea" hvor jeg ikke vil tillate "fy-ord" ved
posting.
Leker litt med eksempelet her, og skal til slutt sette på to ting som
har med store bokstaver og
dette med å finne deler av et ord ( \i og \b eller noe slikt).
Foreløpig er teksten jeg søker i strengen $teksten.
"Fy ordene" jeg søker etter blir i dette tilfelle
orangebananatherasberryapple, det ser jeg.
Men hvorfor får jeg feilmeldingen: Delimiter must not be alphanumeric
or backslash?
Er dette riktige måten å løse dette på forresten?
<?
$stack = "orange";
$stack = $stack . "banana";
$stack = $stack . "the";
$stack = $stack . "raspberry";
$stack = $stack . "apple";
$teksten = "PHP is the web scripting language of choice";
if (preg_match($stack, $teksten)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
?>
Mvh
Håkon Helgesen
Mvh
Håkon Helgesen
I stedet for å bry deg om store og små bokstaver, bør du ikke bry deg
om «case».
> Men hvorfor får jeg feilmeldingen: Delimiter must not be alphanumeric
> or backslash?
Fordi preg_match trenger noen skilletegn (delimiters) for å fungere, les
manualsiden for den funksjonen.
> Er dette riktige måten å løse dette på forresten?
Med eksemplet du postet, sjekker du bare om hele textareaet er et fy-ord.
Jeg regner med at det var enkeltord du ville sjekke? Du må finne en måte
å teste hvert enkelt ord i textarea mot en liste av fy-ord.
Og ellers vil jeg sitere fra http://no2.php.net/preg_match
| Tip
|
| Do not use preg_match() if you only want to check if one string is
| contained in another string. Use strpos() or strstr() instead as they
| will be faster.
Kanskje du skulle sett på stristr()?
http://no2.php.net/manual/en/function.stristr.php
--
Lasse G. Dahl <URL: http://www.lassedahl.com/ >
I'm a citizen of Legoland travellin' incommunicado
> I stedet for å bry deg om store og små bokstaver, bør du ikke bry deg
> om «case».
Oki, tenkte det var lurt å lage store bokstaver av både strengen og
"fy-ordene" så de blir lettere å finne....
> > Men hvorfor får jeg feilmeldingen: Delimiter must not be alphanumeric
> > or backslash?
> Fordi preg_match trenger noen skilletegn (delimiters) for å fungere, les
> manualsiden for den funksjonen.
Mja fikk vekk feilmeldingen med å sette på disse fnuttene jeg nevnte
og da funket vel skilletegnet "kommaet"
regner med funksjonen ikke skjønte hvor strengen sluttet liksom.
Leste litt i manualen om dette ja. :-)
> > Er dette riktige måten å løse dette på forresten?
>
> Med eksemplet du postet, sjekker du bare om hele textareaet er et fy-ord.
> Jeg regner med at det var enkeltord du ville sjekke? Du må finne en måte
> å teste hvert enkelt ord i textarea mot en liste av fy-ord.
Riktig, må få laget meg ei liste over ord, men var usikker på om array
var det riktige, har vel egentlig funnet ut at det er vel litt for
ressurskrevende for dette lille her kansje.
>
> Og ellers vil jeg sitere frahttp://no2.php.net/preg_match
>
> | Tip
> |
> | Do not use preg_match() if you only want to check if one string is
> | contained in another string. Use strpos() or strstr() instead as they
> | will be faster.
> Kanskje du skulle sett på stristr()?http://no2.php.net/manual/en/function.stristr.php
>
Ja kansje, takker for innspill.
Skal se på dette i kveld/natt/lørdag :-)
Mvh
Håkon Helgesen
if (stristr("$teksten","$stack")) {
echo "Ordet $stack finnes i strengen.";
} else {
echo "Ordet $stack finnes IKKE i strengen.";
}?>
Lenger oppe i koden min sår det f.eks $stack= "ekkelt";
Da finner jeg det ordet uten problem.
Men det jeg lurer på er:
- Hvordan kan jeg få lagt inn flere ord å søke på?
Jeg vil lage meg ei liste over ord.
Noen som ser en løsning?
Må jeg lage array og loope igjennom for hvert ord jeg har i arrayen?
Mvh
Håkon Helgesen
> [...] Hvordan kan jeg få lagt inn flere ord å søke på? [...]
> Må jeg lage array og loope igjennom for hvert ord jeg har i arrayen?
Det er vel det absolutt enkleste, ja.
Blei enkelt til slutt når jeg fant en grei måte å gjøre det på, slik
som dette:
$fyord = array('fyord1', 'fyord2','fyord3','fyord4');
foreach ($fyord as $stack){
if (stristr(strtoupper("$newmsg"),strtoupper("$stack"))) {
echo "Ordet $stack <b>finnes</b> i meldingen. Og er IKKE TILLAT";
exit(1);
}
}
Takker for innspill & rask hjelp.
Mvh
Håkon Helgesen
Litt smør på flesk i denne linja. Stristr() er «case insensitive», så
den vil sammenligne riktig også uten strtoupper.
Det er altså to alternativer til bedre måter å gjøre det på:
if (strstr(strtoupper("$newmsg"),strtoupper("$stack"))) {
if (stristr($newmsg, $stack)) {
Den siste er nok å foretrekke, jeg forestiller meg at det er den som
er mest effektiv, og den er i alle fall enklest å lese!
Kan jeg ikke da skrive f.eks Sex lies and pOrnoMovies og den vil gli
igjennom?
Min metode gjør både søkestrengen og fy ordene til store bokstaver og
søker.
Hvis ikke treff, lagres strengen i sin oprinnelige form......
Jeg er ikke ny i php bare treig.... :-)
Mvh
Håkon Helgesen
Aha case insensitive I see.
Leste case sensitive jeg ser du.
Ja da er det smør på flesk.
Me fix.......
Mvh
Håkon Helgesen
Det er allerede sagt at stristr er case insensitive, men bortsett fra
det er det lite rasjonelt å konvertere fyordene til uppercase ved hver
sammenligning. Jeg ville skrevet dem inn med store bokstaver i
utgangspunktet og spare litt arbeid for prosessoren. :-)
--
Vennlig hilsen / Best regards |\ ___,,--, _
Arne Hanssen, Senja, Norway /,`--'' \-,,__,'/
[ Linux counter #102028@ ] |,4 ) )_ ) /~-----'
[ http://counter.li.org/ ]-------'---^~(_/-_)--(_/_)-------
> Det er allerede sagt at stristr er case insensitive, men bortsett fra
> det er det lite rasjonelt å konvertere fyordene til uppercase ved hver
> sammenligning. Jeg ville skrevet dem inn med store bokstaver i
> utgangspunktet og spare litt arbeid for prosessoren. :-)
>
Da kjenner ikke du disse luringene som poster ViAgRa reklame og P0rn0
på forumer
og i gjestebøker for å få treff fra søkemotorene, heheh.
Ofrer glatt litt prosessorkraft for å slippe å gå inn og slette hver 4
timer liksom.
De er brutalt oppfinnsomme.
Det er flere måter å stoppe de på da, for all del.
Bare dette med å legge inn bilder med tall som du skal skrive inn i en
textbox er jo glimrende.
Ser ut til å få stoppet en hel haug nå da.
Har ikke vert noe på 24 timer (normalt er det 3 til 5 postinger på 24
timer)
Det å skrive søkeordene med store bokstaver og bare endret
søkestrengen kunne spart meg for litt, men nå sier både Lasse og
fasiten (php.net) at stristr er case insensitiv....ja
mvh
Håkon Helgesen
> Det å skrive søkeordene med store bokstaver og bare endret
> søkestrengen kunne spart meg for litt, men nå sier både Lasse og
> fasiten (php.net) at stristr er case insensitiv....ja
Et lite tips hvis du sliter med spam. Ta en titt på Akismet. Det finnes
noen PHP-klasser som du kan bruke i skriptet ditt.
F.eks.
<url: http://www.miphp.net/blog/view/php4_akismet_class >
Jeg går utifra at du bruker en egenutviklet blogg-løsning? Hvis ikke,
finnes det helt sikkert et innstikk til det bloggverkøyet du bruker som
gir deg mulighet til å utnytte anti-spam systemet til Akismet.
--
JdB - Jarle Dahl Bergersen [ weblog.bergersen.net ]
There's a term for those who fantasize that the world works in precisely
the way that produces maximum convenience for them, despite years of
evidence to the contrary. The term is "Morons". - Greg Andrews, ASR
Kunne sikkert gått for en ferdig løsning, men jeg lærer underveis på
denne måten og nå sliter jeg ikke med spam heller liksom.
Takker for link Jarle.
Mvh
Håkon Helgesen
Merk likevel at p0rn0 ikke har noe med case å gjøre, men at man bruker
tall istedet for bokstaver. På samme måte vil du måtte slite med v1agra,
vi@gra, Þorno og så videre.
Jeg har et egetutviklet spamfilter i min blogg, og der har jeg gitt
opp svartelisting av ord. Det jeg sjekker, er først om en navn/epost-
kombinasjon har fått godkjent en kommentar før. Da blir den godkjent.
I motsatt fall settes den i moderasjonskø dersom den inneholder en
eller flere link.
> Jeg har et egetutviklet spamfilter i min blogg, og der har jeg gitt
> opp svartelisting av ord. Det jeg sjekker, er først om en navn/epost-
> kombinasjon har fått godkjent en kommentar før. Da blir den godkjent.
> I motsatt fall settes den i moderasjonskø dersom den inneholder en
> eller flere link.
>
Det høres lurt ut, hos meg får du opp ei side hvis du skriver et fy-
ord hvor det står at ordet *@£$EURO£@/&&% ikke godtas og en tilbake knapp
hvor du kan endre teksten til noe bedre.
E-posten sjekkes også, men bare enkelt som noe tekst før @ og minimum
2+ '.'+2 etter @
Det funker som bare det, ikke en eneste spam etter jeg fikk hjelp her.
Jeg har ivertfall lært mye av dette og det er mye derfor jeg hjelper
andre med å få laget slike ting.
Helt klart noe jeg kan utvikle videre, men da med MySql base i bunnen
da (liker ikke txt basert, men han som skulle ha det ville ikke betale
ekstra for det liksom)
Mvh
Håkon Helgesen