leeftijd valideren

Status
Niet open voor verdere reacties.

jeroendenoot

Terugkerende gebruiker
Lid geworden
14 mrt 2005
Berichten
1.492
Hallo, ik heb een formulier dat wordt gecontroleerd bij het klikken op verzenden. Het gaat al goed, maar nu wil ik hebben dat je bij leeftijd alleen cijfers mag invullen. Het formulier in de body ziet er zo uit:

Code:
     <form name="form" method="POST" action="http://www.wepsite.net/cgi-bin/mailing/form.cgi/nl" target="_blank" onSubmit="return checkFields();"> 
      <input type="hidden" name="to" value="zigzagzaag@hotmail.com">    
      <input type="hidden" name="subject" value="Bericht in gastenboek"> 
      <script type="text/JavaScript">
<!--

var datum = new Date();
document.write('<input type="hidden" name="datum" value="'+ datum +'">')

-->
      </script>
      <table border="0">
       <tr>
        <td width="200">
         <p class="c">
Naam:
         </p>
        </td>
        <td width="*">
         <input class="a" type="text" size="20" name="naam">
        </td>
       </tr>
       <tr>
        <td width="30%">
         <p>
Leeftijd:
         </p>
        </td>
        <td width="*">
         <input class="a" type="text" size="2" name="ltijd">
        </td>
       </tr>
       <tr>
        <td>
         <p>
Geslacht:
         </p>
        </td>
        <td>
         <p>
          <input type="radio" name="geslacht" value="man">
Man&nbsp;&nbsp;
          <input type="radio" name="geslacht" value="vrouw">
Vrouw
         </p>
        </td>
       </tr>
       <tr>
        <td>
         <p>
E-mailadres:
         </p>
        </td>
        <td>
         <p>
          <input class="a" type="text" size="20" name="from">
          <br>
          <input type="checkbox" name="email verbergen">
E-mail adres verbergen
         </p>
        </td>
       </tr>
      </table>
      <p>
Bericht:
      </p>
      <textarea class="a" cols="50" rows="8" name="bericht">
Schrijf hier je bericht</textarea>
      <p>
       <br>
      </p>
      <center>
       <input type="submit" name="submit" value="Verzenden" class="b">
      </center>
     </form>

De JavaScript code in de head ziet er zo uit:

Code:
  <script type="text/JavaScript">
<!--

function checkFields() {
missinginfo = "";
if (document.form.naam.value == "") {
missinginfo += "\n     -  Naam";
}
if (document.form.ltijd.value == "") {
missinginfo += "\n     -  Leeftijd";
}
if ((document.form.from.value == "") || 
(document.form.from.value.indexOf('@') == -1) || 
(document.form.from.value.indexOf('.') == -1)) {
missinginfo += "\n     -  E-mail adress";
}
if ((document.form.bericht.value == "") ||
(document.form.bericht.value == "Schrijf hier je bericht")) {
missinginfo += "\n     -  Bericht";
}

if (missinginfo != "") {
missinginfo = "Je hebt deze velden niet of fout in gevuld:\n" +
missinginfo +
"\n\nVul ze a.u.b. correct in!";
alert(missinginfo);
return false;
}
else return true;
}

// -->
  </script>

Ik heb al op diverse sites gekeken hoe je het moet doen, maar het lukt me nog steeds niet. Ik hoop dat iemand me kan helpen.:thumb:
 
Nee, ik denk dat je mijn vraag niet goed begrijpt. Zo als ik mijn script nu heb werkt alles precies goed. Maar als je nu bij leeftijd bijv. 2 willekeurige letters invuld wordt dat goedgerekend. Nu wil ik hebben dat je alleen maar cijfers in mag vullen.
Ik heb dat van jou uitgeprobeerd, maar dan doet hij het juist niet. En nu wel. Snap je het?
 
jeroendenoot, inderdaad heb ik jouw bericht niet goed gelezen en heb daarom mijn bericht verwijderd, ik heb dat later in mijn bericht ook aangegeven dat ik dat zou gaan verwijderen. Excusses voor het ongemak.

Het veld voor het e-mail adres wordt wel goed ondervangen voor het ontbreken v.e. eventuele at-teken(@) en het punt(.). Zo zou de kleine- en de grote letters(a t/m z; A t/m Z en de speciale tekens) voor het invoervak de leeftijd moeten worden ondervangen en wel op dezelfde wijze zoals dat ook bij het invoervak voor het e-mail adres bestemd is.

Ik zal even verder kijken, maar misschien wordt jouw vraag eerder door iemand anders al beantwoord.

Dennis.
 
Ja, zoiets had ik ook al bedacht maar ik kwam er niet uit. Ik ben dan ook niet bepaald goed in JavaScript. Ik hoop dat jij er wel uit komt.

Alvast bedankt
 
Ja jeroendenoot, mijn JS is ook al niet te best meer hoor.

Maar zoals ik al eerder zei, kan dat volgens de procedure dat voor het e-mail adres gebruikt wordt ook worden gedaan. Daar wordt naar de validatie v.h. at-teken(@) en het punt-teken(.) gegeken en daarbij wordt 2 keer de Or(||)-operator gebruikt.

Je zou dan nu 10 Or-operators moeten gebruiken voor de validatie van de leeftijd en wel voor de cijfers 0 t/m 9.

Eigenlijk zou het gebruik v.e. Or-operator niet eens te behoeven worden gebruikt, omdat we 0 t/m 9 als een reeks in de functie IndexOf() kunnen meegeven.

Dennis.

PS. Ik heb zojuist wat typfouten moeten corrigeren. Heb gisteren niet goed kunnen slapen namelijk.
 
Laatst bewerkt:
Zo dus:
(Maar niet de allerbeste manier)

Code:
if ((document.form.from.value == "") || 
(document.form.from.value.indexOf('0') == -1) || 
(document.form.from.value.indexOf('1') == -1) || 
(document.form.from.value.indexOf('2') == -1) || 
(document.form.from.value.indexOf('3') == -1) || 
(document.form.from.value.indexOf('4') == -1) || 
(document.form.from.value.indexOf('5') == -1) || 
(document.form.from.value.indexOf('6') == -1) || 
(document.form.from.value.indexOf('7') == -1) || 
(document.form.from.value.indexOf('8') == -1) || 
(document.form.from.value.indexOf('9') == -1)) {
missinginfo += "\n     -  Leeftijd";

Mooie site heb je trouwens :thumb:

Dennis.
 
Hey,
Bedank voor het compliment;)
Maar het werkt nog steeds niet. Ik heb het veranderd, precies zoals je zei, maar nu geeft hij altijd aan dat je leeftijd verkeerd is. Ik weet wel hoe dat komt, want nu zeg je eigenlijk:

Alleen er een 1, 2, 3, 4, 5, 6, 7, 8, 9 EN 0 in zit is het goed. Anders is het fout.

Dat was niet de bedoeling. Dat kan ook nooit, want ik heb nog nooit iemand gezien die 1234567890 (éénmiljardtweehonderdvierendertigmiljoenvijfhonderdzevenenzestigduizendachthonderdnegintig) jaar is. Toch bedankt voor het denken en ik hoop dat je toch nog een oplossing vindt.
 
Laatst bewerkt:
Probeer eens vlak onder de functie 'checkFields()' de vetgedrukte regel te gebruiken.


function checkFields() {
var ltijd = Lang.parseInt(ltijd);

Daarmee zouden dan de karakters die niet onder de noemer 'numeriek' vallen worden geëlimineerd. Maar ik denk dat het nog steeds niet werkt, omdat de wijze waarop ik de variabele declareert niet juist is.

(Met andere programmeertalen heb ik het zo geklaard, heb bijvoorbeeld in VB een eigen routine gemaakt)

Dennis.

Ik denk dat ik zo ga slapen, heb te weinig geslapen. Kan niet eens behoorlijk denken op dit moment.
 
Laatst bewerkt:
if (!document.form.ltijd.value.match(/^[0-9]{1,3}$/)) {
missinginfo += '\n - Leeftijd';
};

if (!document.form.from.value.match(/^[a-zA-Z0-9\._%-]{2,}@[a-zA-Z0-9\._%-]{2,}\.[a-zA-Z]{2,4}$/)) {
missinginfo += '\n - E-mail adres';
};

http://www.visibone.com/regular-expressions/

Deze funkties gebruiken een zoekpatroon met een reguliere uitdrukking, zie ook de link, het gaat ongeveer zo:

/^ begint met
[0-9] verzameling tekens in dit geval 0 t/m 9
{1,3} 1t/m3 maal
$/ eindigt op

als de ingevulde informatie aan het patroon voldoet geeft de match een true, anders false

De syntax van regular expressions is even wennen maar als het 'klikt' wil je niet anders meer.

Als alternatief voor de leeftijd kun je:
if (document.form.ltijd.value == '' || isNaN(document.form.ltijd.value))
gebruiken. isNaN() komt van: is not a number


Vr.Gr. Egel.
 
He he, dat moet het zijn van Egel.

Ik heb gefaald.

Toch wil ik het volgende even kwijt: Had ik verdo... moeten weten. Dat carret-teken van Egel bijvoorbeeld. In Perl/PHP/GREP van Unix/Linux enz.............

Stom van mij. Nou jeroendenoot, je mag Egel wel dankbaar zijn.

Ga nu even slapen. Doeiiiii

Ben even teruggekomen: @Egel had het over 'reguliere uitdrukking'(Engels: Reguler Expressions)
Dat is ook wat ik met 'gREp' bedoel. Voluit staat het voor: Global Regular Expressions Print. Een machtige functie afkomstig uit UNIX.

Dennis.
 
Laatst bewerkt:
Egel,
Heeeeeeeeeeeel erg bedankt. Ook van het e-mail veld. Dat werkt nu ook super.
Bedankt!
 
Nu heb ik nog een vraagje.
Zoals je kunt zie heb ik ook 2 radiobuttons. Die wil ik ook laten controleren, want je kunt namelijk ook niets invullen. Hoe doe ik dit? Alvast bedankt
 
Sorry, ik heb het al gevonden. Zo heb ik het gedaan:

Code:
if ((document.form.geslacht[0].checked) ||
(document.form.geslacht[1].checked)) {
}
else {
missinginfo += "\n     -  Geslacht";
}

En het werkt!
 
Graag gedaan :)

de regular expression bij het email adres had ik een paar weken geleden al eens beantwoord op helpmij, en dat was ook de reden om me er in te verdiepen, ik kende ze nog niet. Zo leer je ook weer van het beantwoorden van vragen. :)

if (!document.form.geslacht[0].checked && !document.form.geslacht[1].checked) {
missinginfo += '\n - Geslacht';
};

kan ook nog.

En [0-9] kan je ook als \d (digit) schrijven de rexp's zijn dan:
/^\d{1,3}$/
/^[a-zA-Z\d\._%-]{2,}@[a-zA-Z\d\._%-]{2,}\.[a-zA-Z]{2,4}$/

Vr.Gr. Egel.

ik lees net je broncode: bij

if ((!document.form.bericht.value == "") ||
(document.form.bericht.value == "Schrijf hier je bericht")) {
missinginfo += "\n - Bericht";
};

moet de eerste ! nog weg, anders geeft het een foutmelding bij alles anders dan niks ingevuld !
 
Dat is denk ik een handigere methode om radiobuttons te controleren, bedankt. En over die regular expression, Ik snap eigenlijk niet wat dit stukje betekend: ._%-
Kun je dat misschien uitleggen? Alvast bedankt,
Jeroentje
 
\._%-

betekenen de tekens, punt underscore procent en hyphen (verbindingsstreepje) Voor de punt staat een backslash omdat het ook nog een andere betekenis heeft (zoals \n voor nieuwe regel in javacript). Die tekens schijnen allemaal ook in een emailadres te mogen voorkomen. Het zijn dus gewoon extra tekens.

Het verbindings streepje tussen twee letters of cijfers betekent van t/m als [b-e] = [bcde]

Ik zag nog een klein foutje in je script, aan het eind heb je }; else maar voor een else hoort geen ; als:

if (voorwaarde) {
iets doen;
} else {
iets anders doen;
};

En nog een tip:

<textarea class="a" cols="50" rows="8" name="bericht" onfocus="if(this.value=='Schrijf hier je bericht'){this.value='';}">Schrijf hier je bericht</textarea>

Zorgt er voor dat als iemand op het bericht vakje komt het 'Schrijf hier je bericht' gewist wordt zodat ze dat zelf niet meer hoeven doen. Wel even opletten op het gebruik van enkele en dubbele haakjes.

Maar het werkt allemaal al zo te zien. Suc6 ermee!

Vr.Gr. EgelZ
 
Heel erg bedankt voor alles. Ik heb er heel veel van geleerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan