ugrás a tartalomhoz

Form ellenőrzés

rob66 · 2012. Okt. 12. (P), 11.42
Sziasztok!

Hogy lehetne megoldani, hogy egy form textarea mezőjének tartalmát, még annak elküldése előtt, egy js kód ellenőrizze, hogy a benne lévő [minta]-stringek páros számban fordulnak-e elő. Szerver oldalon PHP-ban megcsinálva működik a dolog, de a js-el nem boldogulok.

Előre is köszönöm!
 
1

string.indexOf, regexp.exec

Poetro · 2012. Okt. 12. (P), 11.50
2

Szerver oldalon PHP-ban

kuka · 2012. Okt. 12. (P), 11.51
Szerver oldalon PHP-ban megcsinálva működik a dolog, de a js-el nem boldogulok.
Mutasd: 1) hogyan működik a PHP szkripted és 2) hogyan nem működik a JavaScript próbálkozásod.
3

Itt a php kód. $findme =

rob66 · 2012. Okt. 12. (P), 13.04
Itt a php kód.
  1. $findme = '[PIC]';  
  2. $sz=0;  
  3. $p=0;  
  4. $pos_tomb[0]="";  
  5. for ($sz = 0; strlen($message) > $sz$sz=$sz+1){   
  6.         $pos = strpos($message$findme$sz);   
  7.         if (!$pos === false) {  
  8.             $p=$p+1;    
  9.             $sz=$pos + strlen($findme);}  
  10. }   
  11.   
  12.   
  13.   
  14. if($p & 1)  
  15.     $teszt = "páratlan";  
  16. else  
  17.     $teszt = "páros";  
Js:
  1. function tartalmaz(adat,minta){   
  2.   for (var i=0; i<adat.length; i++)   
  3.     if (minta.indexOf(adat.charAt(i)) != -1)   
  4.       return true;   
  5.   return false;   
  6. }   
A Js kódot a neten találtam, ezt próbáltam módosítani, hogy nekem jó legyen. De mivel nem értek hozzá, hát persze hogy nem sikerült...
4

Nem fedi

Poetro · 2012. Okt. 12. (P), 13.09
A JS kód nem fedi a PHP kódot. A JS kódban karaktereket keresel, míg a másikban substringet. Valamint nem is azt nézed, hogy páros számban fordult-e elő, hanem hogy előfordult-e.
5

Hát persze hogy nem. Írtam,

rob66 · 2012. Okt. 12. (P), 13.17
Hát persze hogy nem. Írtam, hogy nem értek hozzá...
7

Írhattad volna ugyanazt

Poetro · 2012. Okt. 12. (P), 13.42
Te a mintában keresed az adatod karaktereit, ami teljesen mást jelent, mint az adatban keresni a mintát.
  1. function tartalmaz(adat, minta){     
  2.     var p = 0, pos = -1;  
  3.     while ((pos = adat.indexOf(minta, pos + 1)) !== -1) {  
  4.         p += 1;  
  5.     }  
  6.     return p;  
  7. }  
Miután a fenti függvényt elolvastad, kérlek írd le, mit csinál (nincs lényegi különbség egy PHP-ban megírt hasonló kódhoz képest).
Azt pedig hozzátenném, hogy a fenti PHP kódod sem igazán optimális, mivel a következő karaktertől folytatja, nem pedig az utolsó találattól.
6

Én így kezdenék

kuka · 2012. Okt. 12. (P), 13.21
Én így kezdenék neki:
  1. function tartalmaz(adat, minta)  
  2. {  
  3.   return adat.match(new RegExp(minta, 'g')).length  
  4. }  
Ez megadja, hogy az adott mintából hány található az adatban.

Megjegyzés: itt a minta reguláris kifejezés, tehát a "[PIC]" karaktersorra kereséskor a tartalmaz második paramétere '\\[PIC\\]'.
8

Kezdésnek nem rossz... de

rob66 · 2012. Okt. 12. (P), 13.51
Kezdésnek nem rossz...

de akkor a függvénynek nem kellene visszatérni, hanem az előfordulások számából már egy If-es szerkezettel meg lehetne állapítani, hogy páros-e.

Az if-et valahogy így gányolnám össze:
  1. if (adat.match(new RegExp(minta, 'g')).length) & 1)    
Ehhez mit szólsz?
9

mást csinál

Poetro · 2012. Okt. 12. (P), 13.54
Azt, hogy mást csinál a függvény, mint amit a neve mond.
Ráadásul nem is használható olyan rugalmasan, mint az eredeti. Ugyanis azt több feladatra fel lehet használni, míg a tiedet pontosan egyre. Valamint semmibe nem tart írni egy függvényt:
  1. function parosanTartalmaz (adat, minta) {  
  2.     return tartalmaz(adat, minta) & 1;  
  3. }  
10

Hát az enyém sem sokban

rob66 · 2012. Okt. 12. (P), 14.16
Hát az enyém sem sokban különbözött :)


Most itt járok, de még biztos, hogy kell rajta javítani. A PárosanTartalmaz fg.nek valamilyen hibaüzenettel kellene visszatérni, ha jól gondolom. Nem kellene egy IF szerkezetet ott létrehozni?
  1. <SCRIPT LANGUAGE="JavaScript">   
  2. function tartalmaz(adat, minta)    
  3. {    
  4.   return adat.match(new RegExp(\\[PIC]\\, 'g')).length    
  5. }   
  6.   
  7.   
  8.   
  9.   
  10. function parosanTartalmaz (adat, minta) {    
  11.         return tartalmaz(adat, minta) & 1;    
  12.     }    
  13. </SCRIPT>   
  1. <FORM NAME="form" ACTION="dummy" ENCTYPE="text/plain" onSubmit="return tartalmaz()">   
  2. Üzenet  
  3. <TEXTAREA name="message">  
  4. </TEXTAREA>  
  5. <INPUT TYPE="submit" NAME="submit" VALUE="Elküld">   
  6. </FORM>   
11

függvény

Poetro · 2012. Okt. 12. (P), 14.38
Mondjuk a megfelelő függvény meghívása nem árthat. Ha mindenképpen boolean visszatérési érték kell, akkor érdemes lehet a következő változtatás:
  1. function parosanTartalmaz (adat, minta) {      
  2.     return !!(tartalmaz(adat, minta) & 1);  
  3. }  
12

Köszi Poetro az eddigi

rob66 · 2012. Okt. 12. (P), 14.48
Köszi Poetro az eddigi segítséged. Valószínű, hogy csak hétfőn tudom folytatni a témát, addig is jó hétvégét. :)
13

function tartalmaz(adat,

rob66 · 2012. Okt. 15. (H), 10.34
  1. function tartalmaz(adat, minta){     
  2.   return adat.match(new RegExp(minta, 'g')).length}   
  3. function parosanTartalmaz (adat, minta) {         
  4.   return !!(tartalmaz(adat, minta) & 1);}     
  1. <form action="tarolas.php" method="post" onSubmit="return tartalmaz(this, '\\[PIC\\]');">  
  2. Üzenet<TEXTAREA name="message"></TEXTAREA>  
  3. <input type="submit" name="submitted" value="elküld"/>  
  4. </form>  
Jelenleg így néz ki a kódom, ami természetesen nem működik. Gyanítom, hogy az onSubmit-nál a függvényhívás / paraméterátadás nem teljesen jó ...
14

Mondjuk a megfelelő függvény

Poetro · 2012. Okt. 15. (H), 10.47
Mondjuk a megfelelő függvény meghívása nem árthat.

tartalmaz !== parosanTartalmaz
15

Az onSubmit-ban nem a

rob66 · 2012. Okt. 15. (H), 11.05
Az onSubmit-ban nem a tartalmaz-t kellene beleírni? Az a fg. megszámolja a minta előfordulását, majd meghívja a párosantartalmaz-t, ami visszatér egy eredménnyel?
16

Hol?

Poetro · 2012. Okt. 15. (H), 11.49
Meséld már el, hogy a tartalmaz hol hívja meg a parosanTartalmaz-t?
17

Hát azt biza sehol.

rob66 · 2012. Okt. 15. (H), 13.06
Hát azt biza sehol.
18

this?!

Pepita · 2012. Okt. 16. (K), 04.32
Fentieken kívül:
biztos, hogy helyes a fv. paramétereként az egész formot (mint objektumot) átadni?
OK, hogy a js nem típusos nyelv, de teljesen felesleges is, ha csak a textarea értékében kell számolni. Ill. ha más inputok is vannak, akkor át lehet verni a fv-t. Én inkább getElementById['text_id'].value-t vagy this.textarea[0].value-t (ez "csúnya") használnék (de leginkább jQuery-t).
19

A fentihez tényleg nem

Poetro · 2012. Okt. 16. (K), 06.38
A fentihez tényleg nem elegendő átadni a this-t, ami ugye maga az űrlap. Ugyanis kellene magának a textarea-nak az értéke is, ami visszakapható a this.message.value-ból. A getElementById pedig a document-nek egy függvénye.
20

Elkészült!!

rob66 · 2012. Okt. 16. (K), 11.21
Végre sikerült működőképessé tenni.
  1. function validate(obj) {  
  2. var strSymbol = obj.symbol.value     
  3. var darab = strSymbol.match(new RegExp(/[PIC]/g))   
  4.     if ((darab.length) & 1){    
  5.          alert("Hiba, páratlan");  
  6.          obj.symbol.focus();   
  7.         return false;}     
  8.     return true ;  
  9. }  
21

Végre sikerült működőképessé

kuka · 2012. Okt. 16. (K), 12.29
Végre sikerült működőképessé tenni.
A helyesen működés igénye nélkül…
  1. // vagy  
  2. strSymbol.match(new RegExp('\\[PIC\\]','g'))  
  3.   
  4. // vagy  
  5. strSymbol.match(/\[PIC\]/g)  
22

Ezeknek a / és \ jeleknek

rob66 · 2012. Okt. 17. (Sze), 08.46
Ezeknek a / és \ jeleknek milyen szerepük van?
23

Mint a karakterláncoknál: /

kuka · 2012. Okt. 17. (Sze), 09.33
Hasonló mint a karakterláncoknál: / határolja, \ árnyékolja a különleges jelentéssel bíró elemeket.
24

Köszi a segítséget, használni

rob66 · 2012. Okt. 17. (Sze), 11.26
Köszi a segítséget, használni fogom!!