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.

$findme = '[PIC]';
$sz=0;
$p=0;
$pos_tomb[0]="";
for ($sz = 0; strlen($message) > $sz; $sz=$sz+1){ 
		$pos = strpos($message, $findme, $sz); 
		if (!$pos === false) {
			$p=$p+1;  
			$sz=$pos + strlen($findme);}
} 



if($p & 1)
	$teszt = "páratlan";
else
	$teszt = "páros";
Js:

function tartalmaz(adat,minta){ 
  for (var i=0; i<adat.length; i++) 
    if (minta.indexOf(adat.charAt(i)) != -1) 
      return true; 
  return false; 
} 
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.
function tartalmaz(adat, minta){   
    var p = 0, pos = -1;
    while ((pos = adat.indexOf(minta, pos + 1)) !== -1) {
        p += 1;
    }
    return p;
}
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:

function tartalmaz(adat, minta)
{
  return adat.match(new RegExp(minta, 'g')).length
}
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:

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:
function parosanTartalmaz (adat, minta) {
    return tartalmaz(adat, minta) & 1;
}
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?

<SCRIPT LANGUAGE="JavaScript"> 
function tartalmaz(adat, minta)  
{  
  return adat.match(new RegExp(\\[PIC]\\, 'g')).length  
} 




function parosanTartalmaz (adat, minta) {  
        return tartalmaz(adat, minta) & 1;  
    }  
</SCRIPT> 



<FORM NAME="form" ACTION="dummy" ENCTYPE="text/plain" onSubmit="return tartalmaz()"> 
Üzenet
<TEXTAREA name="message">
</TEXTAREA>
<INPUT TYPE="submit" NAME="submit" VALUE="Elküld"> 
</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:
function parosanTartalmaz (adat, minta) {    
    return !!(tartalmaz(adat, minta) & 1);
}
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

function tartalmaz(adat, minta){   
  return adat.match(new RegExp(minta, 'g')).length} 
function parosanTartalmaz (adat, minta) {       
  return !!(tartalmaz(adat, minta) & 1);}   

<form action="tarolas.php" method="post" onSubmit="return tartalmaz(this, '\\[PIC\\]');">
Üzenet<TEXTAREA name="message"></TEXTAREA>
<input type="submit" name="submitted" value="elküld"/>
</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.

function validate(obj) {
var strSymbol = obj.symbol.value   
var darab = strSymbol.match(new RegExp(/[PIC]/g)) 
	if ((darab.length) & 1){  
		 alert("Hiba, páratlan");
		 obj.symbol.focus(); 
		return false;}   
	return true ;
}
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…

// vagy
strSymbol.match(new RegExp('\\[PIC\\]','g'))

// vagy
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!!