calsonMedlem sedan dec. 2003495 inlägg <input type="text" name="strY">
<input type="text" name="strM">
<input type="text" name="strD">
<input type="text" name="strN">
Som ni kanske förstår är det ett person nummer.
Säg att någon skriver in
1980 06 12 0245
nu vill jag kunna smälta ihop dom så det blir: 198006120245
Jag skulle även villja kunna göra så man tar bort de 2 första(19) samt sätta in ett "-" innan de fyra sissta siffrorna så det blir 800612-0245
Tack på förhand
JojoxxMedlem sedan juni 20004 306 inlägg <script type="text/javascript">
function addit(obj){
obj.alla.value=obj.strY.value.substring(2)+obj.strM.value+obj.strD.value+((obj.strN.value)?"-"+obj.strN.value:"");
}
</script>
<form>
<input type="text" name="strY" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strM" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strD" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strN" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="alla" readonly="readonly" />
</form>
Sedan kan du givetvis snittsa till det med kontroll för endast siffror och "rätt" siffror (ej månad 13) eller till och med personnummerkontroll.
calsonMedlem sedan dec. 2003495 inlägg tack jojoxx.
Jag planerar att använda skriptet i din artikel.
Jag var bara tvungen att redigera pers. nr så den passar ditt skript :)
jag ska trixa lite mer med det imorgon, nu är jag aldeles för trött.
eller om någon orkar och kan mixa ihop det ovan med jojoxx kod från hans artikel vore jag väldigt tacksam:
yyyy/mm/dd-nnnn
ska bli yymmdd-nnnn
som jag fick hjälp med ovan.
och det ska passa in i:
function personnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})$/)){ return false; }
this.now=new Date(); this.nowFullYear=this.now.getFullYear()+""; this.nowCentury=this.nowFullYear.substring(0,2); this.nowShortYear=this.nowFullYear.substring(2,4);
this.year=RegExp.$1; this.month=RegExp.$2; this.day=RegExp.$3; this.controldigits=RegExp.$4;
this.fullYear=(this.year*1<=this.nowShortYear*1)?(this.nowCentury+this.year)*1:((this.nowCentury*1-1)+this.year)*1;
var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(this.fullYear%400==0||this.fullYear%4==0&&this.fullYear%100!=0){ months[1]=29; }
if(this.month*1>12||this.day*1>months[this.months*1]){ return false; }
this.alldigits=this.year+this.month+this.day+this.controldigits;
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
this.sex=parseInt(this.controldigits.substring(2,3))%2;
}
Exempel:
var pn=new personnummer("750624-6649");
if(pn.valid){
alert("Personnumret är giltigt.");
alert("Personens födelseår är "+pn.fullYear);
var sex=new Array("kvinna","man");
alert("Personen är "+sex[pn.sex]);
}
tack på förhand
JojoxxMedlem sedan juni 20004 306 inlägg Det beror på när du vill att kontrollen skall göras. Vid submit på formuläret eller när man skrivit klart personnumret (vid submit är antagligen bäst).
<script type="text/javascript">
function personnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})$/)){ return false; }
this.now=new Date(); this.nowFullYear=this.now.getFullYear()+""; this.nowCentury=this.nowFullYear.substring(0,2); this.nowShortYear=this.nowFullYear.substring(2,4);
this.year=RegExp.$1; this.month=RegExp.$2; this.day=RegExp.$3; this.controldigits=RegExp.$4;
this.fullYear=(this.year*1<=this.nowShortYear*1)?(this.nowCentury+this.year)*1:((this.nowCentury*1-1)+this.year)*1;
var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(this.fullYear%400==0||this.fullYear%4==0&&this.fullYear%100!=0){ months[1]=29; }
if(this.month*1>12||this.day*1>months[this.months*1]){ return false; }
this.alldigits=this.year+this.month+this.day+this.controldigits;
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
this.sex=parseInt(this.controldigits.substring(2,3))%2;
}
function addit(obj){
obj.alla.value=obj.strY.value.substring(2)+obj.strM.value+obj.strD.value+((obj.strN.value)?"-"+obj.strN.value:"");
if(obj.alla.value.length==11){
var pn=new personnummer(obj.alla.value);
if(!pn.valid){
alert("Personnumret är inte korrekt.");
obj.strN.focus();
} else {
alert("Tack så mycket.");
}
}
}
function checkform(obj){
var pn=new personnummer(obj.alla.value);
if(!pn.valid){
alert("Personnumret är inte korrekt.");
return(false);
}
return(true);
}
</script>
<form onsubmit="return checkform(this);">
<input type="text" name="strY" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strM" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strD" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="strN" onkeyup="addit(this.form);" onkeypress="addit(this.form);" />
<input type="text" name="alla" readonly="readonly" />
</form>
calsonMedlem sedan dec. 2003495 inlägg Nu har jag pillat och försökt få in koden i min sida men jag får det inte att funka eftersom jag har en massa andra funktioner för just födelsedata delen.
förklaring:
Checka1-4() = Flyttar marökren till nästa fönster vid onkeyup strY->strM->strD->strN->ett fönster efter födelsedata delen.
checkBdate() = Om alla 12 tecken finns (yyyymmdd-nn) så byts en bild ut som talar om att tillräckligt många tecken finns.
jag har även en funktion som skriver ut inehållet i textboxarna till en span
JavaScript
function checka()
{
var letters = document.frmAddUser.strY.value.length +1;
if (letters <= 4)
{document.frmAddUser.strY.focus()}
else
{document.frmAddUser.strM.focus()}
}
function checka2()
{
var letters2 = document.frmAddUser.strM.value.length +1;
if (letters2 <= 2)
{document.frmAddUser.strM.focus()}
else
{document.frmAddUser.strD.focus()}
}
function checka3()
{
var letters3 = document.frmAddUser.strD.value.length +1;
if (letters3 <= 2)
{document.frmAddUser.strD.focus()}
else
{document.frmAddUser.strN.focus()}
}
function checka4()
{
var letters4 = document.frmAddUser.strN.value.length +1;
if (letters4 <= 4)
{document.frmAddUser.strN.focus()}
else
{document.frmAddUser.strStad.focus()}
}
function checkBdate()
{
if ((document.frmAddUser.strY.value.length <=3) || (document.frmAddUser.strM.value.length <=1) || (document.frmAddUser.strD.value.length <=1) || (document.frmAddUser.strN.value.length <=3))
{document.getElementById('errImageBdata').src='gfx/errRed.gif';}
else
{document.getElementById('errImageBdata').src='gfx/errGreen2.gif';}
}
Formuläret
<td>
<img src="gfx/errRed.gif" id="errImageBdata">
<input type="text" size="4" maxlength="4" name="strY" onKeyUp="checka();" value="yyyy" onfocus="if (this.value == 'yyyy') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='yyyy' : this.value=this.value; document.getElementById('msgBdate').innerHTML=this.value;">/
<input type="text" size="2" maxlength="2" name="strM" onKeyUp="checka2();" value="mm" onfocus="if (this.value == 'mm') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='mm' : this.value=this.value; document.getElementById('msgBdate2').innerHTML=this.value;">/
<input type="text" size="2" maxlength="2" name="strD" onKeyUp="checka3();" value="dd" onfocus="if (this.value == 'dd') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='dd' : this.value=this.value; document.getElementById('msgBdate3').innerHTML=this.value;">-
<input type="text" size="4" maxlength="4" name="strN" onKeyUp="checka4(); checkBdate();" value="nnnn" onfocus="if (this.value == 'nnnn') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='nnnn' : this.value=this.value; document.getElementById('msgBdate4').innerHTML=this.value;"><br>
<font size="-1"><span id="msgBdate"> </span> <span id="msgBdate2"> </span> <span id="msgBdate3"> </span> - <span id="msgBdate4"> </span></font>
</td>
JojoxxMedlem sedan juni 20004 306 inlägg Du kan använda personnummerkontrollen direkt istället för att kolla längden på alla fälten i checkBdate(). Den kollar samtliga parametrar.
onkeypress använde jag i mitt exempel för att scriptet även skall reagera på backspace om man korrigerar en felskrivning.
<script type="text/javascript">
function personnummer(nr){
this.valid=false;
if(!nr.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})$/)){ return false; }
this.now=new Date(); this.nowFullYear=this.now.getFullYear()+""; this.nowCentury=this.nowFullYear.substring(0,2); this.nowShortYear=this.nowFullYear.substring(2,4);
this.year=RegExp.$1; this.month=RegExp.$2; this.day=RegExp.$3; this.controldigits=RegExp.$4;
this.fullYear=(this.year*1<=this.nowShortYear*1)?(this.nowCentury+this.year)*1:((this.nowCentury*1-1)+this.year)*1;
var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if(this.fullYear%400==0||this.fullYear%4==0&&this.fullYear%100!=0){ months[1]=29; }
if(this.month*1>12||this.day*1>months[this.months*1]){ return false; }
this.alldigits=this.year+this.month+this.day+this.controldigits;
var nn="";
for(var n=0;n<this.alldigits.length;n++){ nn+=((((n+1)%2)+1)*this.alldigits.substring(n,n+1)); }
this.checksum=0;
for(var n=0;n<nn.length;n++){ this.checksum+=nn.substring(n,n+1)*1; }
this.valid=(this.checksum%10==0)?true:false;
this.sex=parseInt(this.controldigits.substring(2,3))%2;
}
function checka()
{
var letters = document.frmAddUser.strY.value.length +1;
if (letters <= 4)
{document.frmAddUser.strY.focus()}
else
{document.frmAddUser.strM.focus()}
}
function checka2()
{
var letters2 = document.frmAddUser.strM.value.length +1;
if (letters2 <= 2)
{document.frmAddUser.strM.focus()}
else
{document.frmAddUser.strD.focus()}
}
function checka3()
{
var letters3 = document.frmAddUser.strD.value.length +1;
if (letters3 <= 2)
{document.frmAddUser.strD.focus()}
else
{document.frmAddUser.strN.focus()}
}
function checka4()
{
var letters4 = document.frmAddUser.strN.value.length +1;
if (letters4 <= 4)
{document.frmAddUser.strN.focus()}
else
{document.frmAddUser.strStad.focus()}
}
function checkBdate()
{
var obj=document.frmAddUser;
var pn=new personnummer(obj.strY.value.substring(2)+obj.strM.value+obj.strD.value+((obj.strN.value)?"-"+obj.strN.value:""));
if(!pn.valid)
{document.getElementById('errImageBdata').src='gfx/errRed.gif';}
else
{document.getElementById('errImageBdata').src='gfx/errGreen2.gif';}
}
</script>
<form name="frmAddUser">
<img src="gfx/errRed.gif" id="errImageBdata">
<input type="text" size="4" maxlength="4" name="strY" onKeyUp="checka(); checkBdate();" value="yyyy" onfocus="if (this.value == 'yyyy') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='yyyy' : this.value=this.value; document.getElementById('msgBdate').innerHTML=this.value;">/
<input type="text" size="2" maxlength="2" name="strM" onKeyUp="checka2(); checkBdate();" value="mm" onfocus="if (this.value == 'mm') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='mm' : this.value=this.value; document.getElementById('msgBdate2').innerHTML=this.value;">/
<input type="text" size="2" maxlength="2" name="strD" onKeyUp="checka3(); checkBdate();" value="dd" onfocus="if (this.value == 'dd') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='dd' : this.value=this.value; document.getElementById('msgBdate3').innerHTML=this.value;">-
<input type="text" size="4" maxlength="4" name="strN" onKeyUp="checka4(); checkBdate();" value="nnnn" onfocus="if (this.value == 'nnnn') {this.value = '';}" onblur="(this.value.length ==0) ? this.value='nnnn' : this.value=this.value; document.getElementById('msgBdate4').innerHTML=this.value;"><br>
<input type="text" name="strStad"><br>
<font size="-1"><span id="msgBdate"> </span> <span id="msgBdate2"> </span> <span id="msgBdate3"> </span> - <span id="msgBdate4"> </span></font>
</form>