2016-12-30 4 views
1

Ich habe Code, der alle Wörter löscht, die 3 Buchstaben oder weniger sind.preg_replace erlauben bestimmte Zeichen, löschen kurze Wörter

$result = trim(preg_replace 
("/[^a-z0-9']+([a-z0-9']{1,3}[^a-z0-9']+)*/i"," ",$_POST['query'])); 

Es gibt allerdings Probleme. Erstens, ich weiß nicht, wie man bestimmte Charaktere erlaubt (polnisch, genau wie ¶, ć, ż usw.). Zweitens löscht preg_replace kurze Wörter nur, wenn sie in der Mitte der Zeichenfolge sind, also wenn die Zeichenfolge etwas wie "Ich mag etwas" oder noch schlimmer "Ich mag es" das "Ich" und "es" ist Bleib hier. Die einzige Situation, die dies richtig funktioniert, ist, wenn string wie "das ist etwas" ist ("is" wird aus der Zeichenkette gelöscht).

Antwort

1

denke ich, diese Lösung sein könnte:

$re = '/\b\w{1,3}\b/u'; 
$str = 'Ściana jest biała a obraz jest kolorowy it is something'; 

$result = trim(preg_replace($re,"",$str)); 
echo $result; 
//just in case, per comments, if some unwanted white spaces are left... 

$res=preg_replace("%\s{2,}%"," ",$result); 
echo $res; 

I Wortgrenzen hinzugefügt haben, so dass alle Wörter mit weniger als (oder gleich) 3 Zeichen durch Leerzeichen ersetzt werden sollte, und, für die polnische Zeichen - Sie brauchen u Modifizierer. Bitte testen Sie und lassen Sie mich wissen, ob dies für Sie funktioniert.

Online-Test: https://eval.in/706650

+0

Es funktioniert, aber es gibt zusätzliche '' (leere Zeichenkette). Dies ist ein Problem, weil $ result verwendet werden würde, um meine Tabelle zu durchsuchen, und wenn es LIKE '%%' in der Abfrage gibt, wird es buchstäblich ALLES holen. Es ist immer noch besser als alles, was ich bisher versucht habe, aber ich muss diese leere Zeichenfolge loswerden – Vortic

+0

@Vortic, kein Problem - ersetzen durch: ($ re, "", $ str)); ein leerer Raum, oder, einfach, mit einer leeren Schnur, wenn das Ziel ist? ($ re, "", $ str))? – sinisake

+0

Dies zeigt, was passiert http://i.imgur.com/IBTrBeh.png basically, Ihr Code irgendwie irgendwo leere Zeichenfolge erstellt und diese leere Zeichenfolge wird später verwendet, um Tabelle zu suchen (ich unterstrich alle leeren Zeichenfolgen in rot). Normalerweise würde ich diese leere Zeichenfolge ignorieren, aber da sie dazu führt, dass die ganze Tabelle abgerufen wird, muss sie repariert werden. Ich habe den Code wie vorgeschlagen ersetzt, aber immer noch die gleichen Ergebnisse. – Vortic

Verwandte Themen