Jag får inte ordning på min formulär validering. Jag har testat min Regexp i ett testscript, så det ska fungera, men av någon anledning så vägrar scriptet godkänna datumet fast det ska matcha regexp. Jag har stirrat mig blind på det här i flera timmar nu.... :(
js:
<script language="javascript">
function validera()
{
var form_hemmalag = document.getElementById('hemmalag');
var form_bortalag = document.getElementById('bortalag');
var form_datum = document.getElementById('datum');
var form_tid = document.getElementById('tid');
var datum_ptn = new RegExp("\d\d\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])");
var tid_ptn = new RegExp("(0[0-9]|1[0-9]|2[01234])[:][0-5][0-9]");
var felmeddelanden = '';
if (form_hemmalag.value == form_bortalag.value)
{
form_hemmalag.style.backgroundColor='#fdd';
form_bortalag.style.backgroundColor='#fdd';
felmeddelanden += '- Laget kan inte spela mot sig själva! \n';
}
if (form_datum.value =='' || form_datum.value==null)
{
form_datum.style.backgroundColor = '#fdd';
felmeddelanden += '- Du måste ange datum. \n';
}
else if (datum_ptn.test(form_datum.value) == false)
{
form_datum.style.backgroundColor = '#fdd';
felmeddelanden += '- Felaktigt datum, formatet ska vara åååå-mm-dd \n';
}
if (tid_ptn.test(form_tid.value) == false)
{
form_tid.style.backgroundColor ='#fdd';
felmeddelanden += '- Du måste ange tid i korrekt format. (hh:mm) \n';
}
if (felmeddelanden.length >1)
{
alert('Följande fel hittades:\n' + felmeddelanden);
return false
}
else {return true}
}
</script>
Just ja, en sak till. De regexparna matchar bara datumsträngen, men kräver inte att strängen bara består av datumsträngen. Alltså, alla strängar passerar valideringen så länge de innehåller något som validerar mot datum-regexpen, oavsett om användaren har skrivit något mer innan eller efter. xxx2007-03-18yyy skulle alltså validera med din regexp.
Mitt förslag: Använd ^ och $ som matchar mot början resp. slutet av en sträng.
Alltså:
var datum_ptn = /^\d\d\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$/;
var tid_ptn = /^(0[0-9]|1[0-9]|2[01234])[:][0-5][0-9]$/;