ugrás a tartalomhoz

Illeszkedő sablon

Devid · 2012. Már. 16. (P), 13.59
Kedves Mindenki!

Elnézést, hogy új témát nyitottam neki, de kicsit sürgős a dolog és sajnos nincs időm órákat böngészni a fórumokat, hogy megtaláljam a kérdésemre a választ. Ezért elnézést kérek előre is mindenkitől!
Tehát a problémám: egy webes űrlapról bejővő karaktersorozatot kell feldolgozzak. Ezzel még semmi probléma, de a lényeg, hogy illeszkedniük kell egy bizonyos sablonra. Pl.: egy dátumot kérek be egy sima mezőből és azt szeretném, ha
^[0-9]{4}(.|/|-)[0-9]{2}(.|/|-)[0-9]{2}.?$
erre a regexp-re illeszkedne, ha nem azt jelezze az űrlap kitöltőjének. preg_match()-függévnnyel próbálkoztam, de nagyon nem akart össze jönni.
Tehát a kérdésem: milyen fv-t alkalmazzak vagy, hogy tudom elérni a kívánt eredményt?
A válaszokat előre is köszönöm!

Üdv.: Dávid
 
1

pont (.)

Poetro · 2012. Már. 16. (P), 14.03
Ezt azért remélem tudod, hogy a pont (.) minden karakterre illeszkedik, ezért teljesen felesleges a gyűjtő csoport. A preg_match teljesen jó lesz a feladatra, már csak az a kérdés, hogy elolvastad-e a használatát, illetve, hogy hogyan próbáltad használni.
2

ahham...

Devid · 2012. Már. 17. (Szo), 15.37
Ez mind szép és jó...de akkor nekem miért nem működik egy ilyen kódom:
function proba($szoveg){
$minta="/^[0-9]{4}\.|\/|-[0-9]{2}\.|\/|-[0-9]{2}.?$/";
if(preg_match($minta,$szoveg)){
return true;
}
return false;
}
Folyamatosan false-t dob vissza a preg_match az elágazásban, és sosem lép be, hiába tökéletes a bevitt $szoveg változó...próbáltam már ^ nélkül, mert valahol azt olvastam, hogy az a negálás php regexp-be. Próbáltam más határoló jelekkel (*), ugyanezzel az eredménnyel. Próbáltam már a $minta helyett beírni a regexp-et, az sem volt jó. Valami ötlet?
4

Próbáld például a

kuka · 2012. Már. 17. (Szo), 17.17
Próbáld például a proba('-69.') függvényhívást. Arra igazat ad vissza.

Amit te akarsz azt én inkább így írnám:

function proba($szoveg)
{
  return preg_match('!^[0-9]{4}[./-][0-9]{2}[./-][0-9]{2}.?$!', $szoveg);
}
Légy szíves használj forráskód formázó BBCode-ot.
5

jup, jup :D

Devid · 2012. Már. 18. (V), 13.28
Köszi ez jó lett:D:D Örök hálám érte:D
Rendben mostantól használom a formázó kódot!
3

regexp

Devid · 2012. Már. 17. (Szo), 15.39
jah igen és próbáltam már a preg_match-ba regexp-ként a [0-9] intervallumot és láss csodát...erre sem működött...mindig false-t dobott, ha számot írtam, ha betüt...
6

Üdv.Egy olyesmit szeretnék

sandrosdj · 2012. Okt. 29. (H), 17.37
Üdv.

Egy olyasmit szeretnék megvalósítani, ami magától felismeri, hogy milyen tulajdonságok vannak megadva és alkalmazza is a html elemen.

Elképzelés:
[h1=16px,red,center]Nanananana[/h1]

<h1 style="font-size: 16px; color: red; text-align: center">Nanananana</h1>
Amire eddig jutottam:
$p[] = '#\[h([\1-6]*?)\](.*?)\[/h([\1-6]*?)\]#si';
$r[] = '<h\1>\2</h\1>';
...és ez akkor is működjön, ha mondjuk kimarad egy paraméter, tehát: [h1=16px,center] vagy más helyre kerül: [h1=center,red]
7

Ha már a kivánságlistáknál

kuka · 2012. Okt. 29. (H), 17.53
Ha már a kivánságlistáknál tartunk:
És világbékét!
Gracie Hart – Beépített szépség


Ami a reguláris kifejezésedet illeti, például [h2012]Nanananana[/h5]-re is illeszkedni fog. Ha ilyesmit reguláris kifejezéssel szándékszol átalakítani, akkor alaposan tanulmányoznod kell őket.
8

Jöhet az is, bár ez nem fogja

sandrosdj · 2012. Okt. 29. (H), 18.04
OFF: Jöhet az is, bár ez nem fogja kielégíteni a 'kívánságomat' és ha a helyzet fontossága megengedné nem itt osztottam volna meg a dolgot, hanem megpróbálok magamtól rájönni, de mivel egyelőre nem sokat értek a regexp-es dolgokhoz és jó lenne minél előbb megoldani ezt kénytelen voltam a többi kedves programozó emberkék segítséget kérni.

a [h2012]-re nem fog illeszkedni, mert 1-től 6-ig le van korlátozva, viszont a [h2][/h6]-ra fog. Ez is egy hiányosság, de ezt a 'kihívást' megtartom magamnak, csak nem lehet annyira bonyolult, mint a fentiek.
9

a [h2012]-re nem fog

kuka · 2012. Okt. 29. (H), 18.15
a [h2012]-re nem fog illeszkedni, mert 1-től 6-ig le van korlátozva, viszont a [h2][/h6]-ra fog.
Ha a korlátozással a jelenlegi [\1-6]-re utalsz (az „1” árnyékolásának semmi értelme), akkor az elégtelen. (Segítségként megjegyzem, hogy a [h]Nanananana[/h2012]-re is illeszkedik. Hátha így világosabb lesz hol toltad el.)

Ami a segítségkérést illeti, én megosztanám eddigi tapasztalataimat e téren, de egyelőre nem látom értelmét. Fölösleges körmölnöm egy A4.-nyi választ, hogy utóbb kiderüljön, hogy egyéb körülmények miatt úgysem járható számodra. Szóval egy alaposabban körülírt kérdés jót tenne a potenciális válaszolók lelkesítése érdekében.

Plusz egy kérdés: miért itt értekezünk erről és nem egy új témában?
10

A kérdés az az, hogy mégis

sandrosdj · 2012. Okt. 29. (H), 19.22
A kérdés az az, hogy mégis hogyan lehetne ezt megvalósítani (példával)?
Dokumentációt én is találtam, de egyelőre az összefüggések/alkalmazásuk részletes tudása nélkül nem tudok működő kódot összerakni.

A plusz kérdésre a válasz: nem láttam értelmét egy újabb témát nyitni ennek, de lehet, hogy mégis jobban jártam volna.
11

Miért így?

Poetro · 2012. Okt. 29. (H), 19.43
Ha nem értesz a reguláris kifejezésekhez, akkor miért azzal akarod megoldani? A másik dolog, hogy tegyük fel, sikerült kigyűjteni a paramétereket, akkor hogyan oldod meg a CSS létrehozását?
12

Azért szeretném ezzel, mert

sandrosdj · 2012. Okt. 29. (H), 19.53
Azért szeretném ezzel, mert sokkal gyorsabb és átláthatóbb lenne, mintha php-ben vizsgálnám meg az akár több oldalnyi szöveget. A css egy újabb kérdést vet fel, ha ezt így nem lehet megoldani, ahogyan ezt az elképzelésemben bemutattam van rá még ötletem, de előbb legyenek meg a paraméterek.
13

oldd meg

Poetro · 2012. Okt. 29. (H), 20.41
Szerintem kezdd el megtanulni, hogyan működnek a reguláris kifejezések, de addig is oldd meg a feladatot nélküle. A sebességgel majd ráérsz később foglalkozni, miután bebizonyítottad, hogy ez okozza az oldal lassulását, és hogy reguláris kifejezésekkel tényleg gyorsabbá és áttekinthetőbbé lehet tenni a kódot.
16

Például DOM documenttel

Pepita · 2012. Nov. 4. (V), 22.45
Nézz utána a manualban: DOMDocument->loadHTML(), DOMDocument->getElementsByTagName(), DOMElement->getAttribute().

Így könnyen, átláthatóan ki tudod bányászni a css-t (is), annak további feldolgozása más kérdés.

Hátrányai ennek a megoldásnak:
- Ha valóban nagy terjedelmű (~200 kB felett) a HTML, akkor elég erőforrásigényes lehet;
- Csak helyes HTML-el műxik, kivételt dob, ha pl. nincs lezárva egy tag (ez mondjuk nem biztos, hogy hátrány).

Megj.: még nem olvastam végig a témát, lehet, hogy már kaptál megoldást.
14

A kérdés az az, hogy mégis

kuka · 2012. Okt. 30. (K), 11.20
A kérdés az az, hogy mégis hogyan lehetne ezt megvalósítani (példával)?
Ha példát akarsz, hát írtam egyet a reggeli kávé mellett. De szerintem úgysem veszed sok hasznát.

$szoveg = '[h1=16px,red,center]Nanananana[/h1]';

$minta = '#\[(h[1-6])(?:=(.+?))?\](.*?)\[/\1\]#si';

echo preg_replace_callback($minta, 'feldolgoz', $szoveg);

function feldolgoz($talalat)
{
  $stilus = array();

  foreach (explode(',', $talalat[2]) as $attributum) {
    if (preg_match('/^(?:\\d*\.)?\\d+(?:em|ex|ch|rem|cm|mm|in|pt|pc|px|%)$/i', $attributum)) $stilus[] = "font-size: $attributum";
    elseif (in_array(strtolower($attributum), array('left', 'right', 'center', 'justify'))) $stilus[] = "text-align: $attributum";
    elseif (preg_match('/^#[[:xdigit:]]{3}(?:[[:xdigit:]]{3})?$/', $attributum)) $stilus[] = "color: $attributum";
    elseif (in_array(strtolower($attributum), array('aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white', 'yellow'))) $stilus[] = "color: $attributum";
  }

  return "<$talalat[1]" . ($stilus ? ' style="' . implode('; ', $stilus) . '"' : '') . ">$talalat[3]</$talalat[1]>";
}
15

Nos, köszönöm!, hogy vetted a

sandrosdj · 2012. Okt. 30. (K), 17.00
Nos, köszönöm!, hogy vetted a fáradtságot. Most a délutáni tea mellett tanulmányozom a működését.

Működik és sokat segítettél! :)