webForumDet fria alternativet

preg_match i stället för eregi

PHP

7 svar · 1 129 visningar · startad av Mr T

Medlem sedan maj 20071 061 inlägg
Frågan#1

Upptäckte att eregi komandot ska bort, så då är det väll dax att lära sig något nytt. Kommandot preg_match verkar vara ett alternativ som skulle funka i mitt fall.

Vill se om en text som användaren skriver in innehåller < eller >

Har kommit så här långt, men hur fortsätter man ?

if (preg_match('/^</',$text)) {

(Finns det någon "for dummies" förklaring på hur man bygger upp "pattern" strängen i preg kommandona ?)

Medlem sedan jan. 2005953 inlägg
#2

Så här kanske

if (preg_match('/<|>/', $text)) {

eller

if (preg_match('/[<>]/', $text)) {
Medlem sedan maj 20071 061 inlägg
#3

Insåg att jag inte specifiserade om båda eller bara den ena krävdes, men naturligtvis räcker det med att ett av tecknen finns.

Om man nu skulle vilja ha så att båda krävs, hur skriver man då ?

Medlem sedan aug. 20039 340 inlägg
#4

I sin enklaste form:

 if (preg_match('/<.*>/', $text)) {

...kräver att strängen ska innehålla följande, varsomhelst i strängen: < följt av 0, 1 eller flera valfria tecken, följt av >. Vill du matcha början eller slutet av en sträng kan du använda ^ och $

 if (preg_match('/^<.*>$/', $text)) {

...kräver att strängen börjar med < följt av 0, 1 eller flera valfria tecken, följt av > och där måste strängen sluta.
Du kan även göra:

 if (preg_match('/^<[^<>]+>$/', $text)) {

...Som kräver att strängen börjar med < följt ett eller flera (Notera + istället för *) tecken som får vara vadsomhelst utom < eller > ( [^<>] ) följt av > följt av slut.

Sedan finns det regexar för att komplett matcha HTML-taggar, som säkert går att hita om du använder wF's sökfunktion.

Medlem sedan maj 20071 061 inlägg
#5

Fick det inte att funka helt med nitro2k01;s lösning. Kan bero på att jag bara testade rakt av med ENBART < och/eller >
Lösning blev denna

if (preg_match('/</',$story) OR preg_match('/>/',$story)) {
Medlem sedan aug. 20039 340 inlägg
#6

Mr T, det du gör nu är likvärdigt med metalboys förslag.

Medlem sedan maj 20071 061 inlägg
#7

okej!

Medlem sedan maj 20071 061 inlägg
#8

Ni hade sådan enorm koll förra gången så nu vänder jag mig åter till er.

Efter att använt preg_match('/<|>/', $text) med toppen resultat. Har sluppit få in länkar i mina texter från användare. Tyvärr har jag nu börjat få in spamm förslag, bara http:// adresserna, inte länkade.

tror mig kunna lösa detta genom att utöka "otilåtena tecken" med preg_match('/<|>|http/', $text) vilket verkar funka rent tekniskt och bör hjälpa en stund mot spamm. Men har ni andra förslag på hur man blir av med spamm inlägg ?

fortsatta förbättrade förslag på otillåtna tecken borde väll vara
http://
ftp://

Tacksam för fler förslag, och hur jag lägger in dom i preg_match.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)