ugrás a tartalomhoz

<textarea> felesleges sortörések kiszedése

vikgfk · 2014. Jan. 1. (Sze), 11.48
Sziasztok!

Elsőnek is Boldog Újévet kívánnék mindenkinek!

A problémám a következő van egy <textarea> mezőm amin ellenőrzöm a beírható karaktereket. Mármost a beviteli mezőt hülyeség ellen szeretném levédeni úgy hogy ne lehessen végtelenségig sortörést alkalmazni. Én úgy gondoltam volna hogy az adatbázis féltöltése előtt kiszedném a felesleges sortöréseket.
És így max 2 sortörés lehetne egymás után.
De mivel hogy mindig előkerül egy ráérő illető így még pluszba valahogyan azt is meg kellene oldani hogy maximálni lehessen a sortörések számát.
Így elkerülve azt hogy 500db karakter kerüljön egymás alá.

Most jelen pillanatban így használom.
$tartalom=$_POST["tartalom"];
$hirdetes_tartalom='/^[a-zA-Z0-9áéíóöőúüűÁÉÍÓÖŐÚÜŰ.\s\,\!\?\/-]{0,500}$/s';

//ellenőrzés
if(!preg_match($hirdetes_tartalom, $tartalom))
  {
print("<div id='hiba'>Leirás csak betűket, számokat, szóközt . , - ! ? / tartalmazhat és maximum 500 karakter lehet!</div>");
  $hiba=1;
 }

<form>

<textarea name="tartalom" id="tartalom" style="overflow:auto;resize:none" rows="15" cols="97" onKeyDown="textCounter(this.form.message,this.form.remLen,500);"
         onKeyUp="textCounter(this.form.tartalom,this.form.remLen,500);">


<?php if (isset ($_POST["tartalom"])) { print htmlspecialchars($_POST["tartalom"] , ENT_QUOTES); }?>
</textarea>
<input readonly type=text name=remLen size=3 maxlength=3 value=500 /> karakter <br>
</form>
 
1

substr_count()

pkadam · 2014. Jan. 1. (Sze), 22.37
A substr_count() függvény összeszámolja, hányszor fordul elő egy karaktersor egy szövegben. Így ha substr_count("\n", $tartalom) > 500, akkor hibát dobsz.

Úgy látom, a "max két sortörés egymás alatt" sincs még implementálva: ennél majd figyelj arra, hogy üresnek tekints (és azzá is konvertálj) minden olyan sort, amiben nincs látható karakter (tehát pl. csak szóköz és/vagy tabulátor karakter van benne).
2

preg_replace()

vikgfk · 2014. Jan. 2. (Cs), 09.00
Úgy látom felköthetem a gatyámat mire megoldom.
Közben meg ezt találtam.
Csak az a kérdés hogy ezzel mit tudnék kezdeni?
Plusz hogy ha jól sejtem akkor a kiíratásnál tudnám használni.
$text = preg_replace(/(\r?\n){3,}/, "", $text);
Pontosan ez mire is való?
3

:)

Pepita · 2014. Jan. 2. (Cs), 09.33
Pontosan ez mire is való?
Arra, hogy akár windowsos, akár unixos sortörésed 3 vagy több van egymás után, akkor 0 lesz. De itt nem számítanak bele a nem látható karakterek, tehát pl. csinálhat a júzer 100 üres sort úgy, hogy mindegyikbe ír egy SPACE-t... Ez így gagyi még.
4

Limitálás

pkadam · 2014. Jan. 2. (Cs), 10.40
Félreolvastam, az általam írt fenti példa legfeljebb 500 sortörésre vonatkozik. De ugye az üres sorokat hiába is szűrnéd, megteheti, hogy soronként csak egy pontot ír. Az össz-sortörésszámot limitálhatod 6-ra (azt nagyjából reális maximumnak érzem ilyen terjedelemben, ebből csinálhat 3 bekezdést, de engedhetsz többet is) – ha ennél több van benne, visszadobod.

Ezzel együtt az egymást követő, kettőnél több sortöréseket pedig (a körülöttük lévő üreskarakterekkel együtt) átalakítod bevitelkor két sortörésre.

$text = preg_replace('/(?:\s*\r?\n\s*){3,}/g', '\n\n', $text);
Érdemes még trim()-melni a szöveget, illetve az összes sortörésnél is eltávolítani az esetleges körülöttük lévő üreskaraktereket (ez a fenti példából már könnyeden átalakítható).
6

Limitálás

vikgfk · 2014. Jan. 2. (Cs), 16.58
Bocsi de már kezdek belekavarodni az egészbe.
Akkor kezdjük a legelején.
Mármost ha jól értelmezem akkor a preg_replace-el tudom szűrni a bevitt sortöréseket?
Tehát ha a kódot beillesztem az oldalamra akkor ha 3-rom bekezdésnél több van az oldalon akkor hibaüzenetet tudok küldeni a felhasználónak hogy kevesebb üres sort használjon.
Valami ilyesmi képen:


$tartalom=$_POST["tartalom"];
$text = preg_replace('/(?:\s*\r?\n\s*){3,}/g', '\n\n', $text);

stb...
//ellenőrzés
			if(!preg_match($text, $tartalom))
			{
				print("<div id='hiba'>Sok a sortörés!</div>");
				$hiba=1;
			}   



Igaz erre nekem hibát dob.
7

Szűrni?

Pepita · 2014. Jan. 2. (Cs), 18.19
ha jól értelmezem akkor a preg_replace-el tudom szűrni a bevitt sortöréseket
Nem, ez a függvény semmit sem szűr, hanem megadott minta alapján cserél szövegrészeket, megadott szövegre. Javaslom, hogy olvasd át az összes "Reguláris kifejezések függvényei"-t a kézikönyvben, értsd meg azokat, utána próbáld újra, mert így csak megkeveredsz.

Szerk.: a példádban előbb kicseréled az összes 3 vagy több sortörést (nem látható karakterekkel együtt) 2 linuxos sortörésre, ezután, ha változott a szöveg, hibát jelzel.
Döntsd el, hogy javítani akarsz, vagy hibaüzit küldeni, mert ha már kijavítottad, akkor a többi felesleges. Majd látja a tréfás Júzer, hogy nem sikerült a tréfa...
5

Így kettő marad

Dömcsi · 2014. Jan. 2. (Cs), 11.47
function sortores($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "@", $string);
$string = preg_replace('/@/', '<br>', $string, 2);//ide hogy hány sortörést akarsz
$string = preg_replace('/@/', ' ', $string); 
return $string;

echo sortores($_POST['tartalom']);