Just nu i M3-nätverket
Gå till innehåll

Inte tillåta tecknet '


inka6

Rekommendera Poster

Hej!

en kanske dum fråga...jag vill att detta tecken ' inte ska accepteras i ett formulär.

 

Har en javascriptkontroll som kollar siffror, kan jag i denna funktion även lägga in att den kontrollerar så att inte tecknet ' finns med

 

 

   function kollasiffror (str)
   {
     var index;
     for (index = 0; index < str.length; ++index)
       if ('0123456789-/"'.indexOf (str.substring
           (index, index + 1)) == -1)
         return false;




     return true;
   }

 

 

Tacksam för kodförslag!

 

[inlägget ändrat 2008-03-31 08:33:23 av inka6]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Den kontrollerar ju redan så att enbart de tecken du angett existerar, eftersom enkelfnutt inte finns med där tillåts den ju redan inte.

Dock kan du förenkla din funktion med en regex-test istället:

function kollasiffror(str) {
	var re = new RegExp("[^0-9\-\/]");
	return(re.test(str));
}

 

Länk till kommentar
Dela på andra webbplatser

Ok, tack, om jag istället vill ha en egen funktion som enbart kollar om fnutt finns, hur skriver man bäst då?

 

Länk till kommentar
Dela på andra webbplatser

Är så kass på detta (sorry att jag inte förstår!), får det inte att fungera....

 

  <script language="Javascript">
<!--

   function kollafnutt(str) 
{
return(str.indexOf("'")>-1);

}
//-->
 </script>

 

Anropar den sedan som

onSubmit="return kollafnutt (str);

 

Länk till kommentar
Dela på andra webbplatser

Micke_skane

Var kommer värdet i str ifrån i följande anrop?

onSubmit="return kollafnutt (str);

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
onSubmit="return kollafnutt (str);"

Har du något värde på str då? Varför gör du kontroll efter enkelfnutt här?

 

Länk till kommentar
Dela på andra webbplatser

Det jag vill är att kontrollera alla fält i formuläret (oavsett antal) om det finns enkelfnutt innan formuläret skickas

 

Länk till kommentar
Dela på andra webbplatser

Micke_skane

Då hade jag loopat igenom formulärfälten och kollat värdena för var och en.

Träffar den på en fnutt så sätt en variabel till true(som är false till en början).

Kolla sen värdet på variabeln efter loopen och bestäm vad som ska retuneras.

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

function formIsFreeFromQuotes() {
quotesFound=false;
flds=document.getElementsByTagName('INPUT');
for (i=0;i<flds.length;i++) {
	fld=flds[i];
	quotesFound=quotesFound || (fld.type=='text' && fld.value.indexOf("'")>-1) 
}
return !quotesFound;
}

 

och i FORM lägger du in

onsubmit="return(formIsFreeFromQuotes());"

 

Men har du fler checkar än bara efter citattecken så måste du ju förstås slå ihop dessa i onsubmit.

 

Är kontrollen till för att förhindra sql-injections så är den rätt meningslös att ha på klientsidan, eftersom du fortfarande måste använda en säker metod på serversidan. Varför inte bara filtrera bort enkelfnuttar efter att formuläret postats?

 

[inlägget ändrat 2008-03-31 10:24:27 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Ok, tack, hur gör man för att filtrera bort enkelfnuttarna?

Med en vanlig replace på server-sidan, hur du gör detta beror ju på server-språk.

 

Länk till kommentar
Dela på andra webbplatser

Men då måste jag fylla i för varje fältnamn, eller? Och det vill jag inte, jag vill att den kollar i alla fält (oavsett antal) och excluderar enkelfnutt.

 

Sätter jag denna kodsträng överst i ASP-filen och vad står ordet data för?

 

Sorry för alla mins kontiga frågor :)

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
Men då måste jag fylla i för varje fältnamn, eller?

Jamen på serversidan måste du ju i vilket fall behandla varje fält för sig, eller vad gör du med datan egentligen. Hursomhelst har detta ramlat bort från både ämnet och forumtillhörighet.

 

Länk till kommentar
Dela på andra webbplatser

Micke_skane

Du har ju även på serversidan möjlighet att loopa igenom formulärets element och kolla des värde eller replace:a fnuttar i värden/strängen.

Kolla in

For Each fält In Formlär

...

Next

 

Men som Anjuna säger är det Asp det nu handlar om, och ett tips till andra som läser denna tråd är att FÖRST göra kollen på serversidan!

SEN, om man nu inte vill att dem flesta ska belasta servern innan en "förstakoll", använder man javascript.

Sen är där ju några som inte tillåter javascript och dem "går förbi förstakollen" och Därför SKA man första göra kollen på serversidan.

 

[inlägget ändrat 2008-03-31 11:13:59 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Men om man går tillbaka till javascript, kan man använda sig av en funktion med replace i javscript som ersätter enkelfnutt med blanksteg?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

function removeQuotes() {
flds=document.getElementsByTagName('INPUT');
for (i=0;i<flds.length;i++) {
	fld=flds[i];
	if (fld.type=='text') fld.value=fld.value.replace("'"," "); 
}
}

 

och i FORM

onsubmit="removeQuotes();"

 

Länk till kommentar
Dela på andra webbplatser

Jag får det bara att fungera att det första fältet tömms från fnuttar.

 

Är det för att jag la in en return true i slutet av funktionen?

 

Om jag inte har true så måste jag klicka två ggr på sendknappen för att det ska fungera...

[inlägget ändrat 2008-03-31 12:36:38 av inka6]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Jag använde ett dåligt replace-uttryck, det blev inte globalt. Ändra funktionen till

	function removeQuotes() {
	flds=document.getElementsByTagName('INPUT');
	for (i=0;i<flds.length;i++) {
		fld=flds[i];
		if (fld.type=='text') fld.value=fld.value.replace(/'/ig," "); 
	}
}

 

Länk till kommentar
Dela på andra webbplatser

Micke_skane

Känns lite dumt att ersätta fnuttarna med mellanslag, tänk om någon skriver in ofattbart många fnuttar efter varandra.

Då kommer du att få stora mellanrum mellan orden.

 

Jag hade ersatt dem med ""(inget).

 

Länk till kommentar
Dela på andra webbplatser

får det inte riktigt att fungera ändå, måste klicka två ggr på sendknappen för att få det att fungera...tror det är mitt anrop det är fel på...

 

onSubmit="return kollaformularet(this) && removeQuotes() && maila();" >

 

Om jag vill ha in samma funktion på en textarea, hur läggar man lättast in det?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

1. maila() vet jag inte ens vad den gör, men det låter inte som en kontrollfunktion och skall därför inte ingå i returvärdet i OnSubmit

2. Min funktion skall inte ingå i returvärdet i OnSubmit

 

Pröva med:

onSubmit="removeQuotes(); maila(); return(kollaformularet(this));" >

 

Länk till kommentar
Dela på andra webbplatser

Micke_skane

function removeQuotes() {
var txtfld=document.getElementById("textareaId");
	flds=document.getElementsByTagName('INPUT');
	for (i=0;i<flds.length;i++) {
		fld=flds[i];
		if (fld.type=='text') fld.value=fld.value.replace(/'/ig," "); 
	}
txtfld.value=txtfld.value.replace(/'/ig," ");
}

onSubmit="removeQuotes();maila();return kollaformularet(this)>

Jaha, Anjuna hade inte heller något att göra just nu ;)

 

[inlägget ändrat 2008-03-31 13:16:27 av Micke_skane]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...