HarbackMedlem sedan juni 2001212 inlägg
Hejsan.
Använder mig av följande kod för att validera ett nummer-fält:
<!--
function kontrollera(obj){
var svar = obj.svar.value;
var pattern = /^((\d+)|(\d+[\.,]\d+))(([Ee])-?\d+)?$/;
flag = pattern.test(svar);
if(flag){
return true;
}
else{
alert("Du måste skriva in ett tal.");
document.fraga.svar.focus();
return false;
}
}
//-->
Kom på att nu kan ju någon bara skriva in en nolla som inte är tillåtet i mitt fall. Satt och försökte knåpa ihop en lösning i pattern men kom inte på nån. Är det någon som kan hjälpa mig?
------------------
MVH
Harback
Erik JuhlinMedlem sedan maj 20007 625 inlägg
Jag hade nog skrivit ungefär så här.
function kontrollera(obj) {
var svar = obj.svar.value;
if (isNaN(svar)) {
alert("Du måste skriva in ett tal.");
document.fraga.svar.focus();
return false;
} else if (svar < 1) {
alert("Talet får inte vara mindre än noll.");
document.fraga.svar.focus();
return false;
} else {
return true;
}
}
Inga regulära uttryck alltså.. :)
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
[Redigerat av Erik Juhlin den 20 sep 2001]
JojoxxMedlem sedan juni 20004 306 inlägg
Ja. Regexp är smidigt, men kanske lite överarbetat i ett sådant exempel. :)
------------------
/ J
HarbackMedlem sedan juni 2001212 inlägg
Jag använder inte bara Regular Expressions för att det är tufft ;) utan också för att man ska kunna skriva både punkt (.) och komma (,). Går det att lösa med Regular Expressions att man inte får skriva bara noll?
------------------
MVH
Harback
[Redigerat av Harback den 20 sep 2001]
peterbladhMedlem sedan juni 2000274 inlägg
kan du inte bara lägga till
if(flag && svar != 0)
...
------------------
/peterbladh
[Redigerat av peterbladh den 21 sep 2001]
spangoMedlem sedan juni 20006 147 inlägg
Går det att lösa med Regular Expressions att man inte får skriva bara noll?
Ja, även om det är lite overkill. Så här, typ:
var nonZeroNumber = /^[1-9]\d*([.,]\d+)?$/;
Då måste det börja med 1-9, det får följas av vilket/vilka tal som helst, som antingen avslutar strängen eller efterföljs av decimaltecken (punkt eller komma) som sedan följs av en eller flera valfria nuffror.
------------------
I wasn't born with enough middle fingers
HarbackMedlem sedan juni 2001212 inlägg
Härligt!
------------------
MVH
Harback
HarbackMedlem sedan juni 2001212 inlägg
Hejsan igen!
Efter att ha testat din variant av RegExpen så kan man ju skriva t.ex. 0,0 eller 0,000 osv. Jag försökte att fixa pattern och också lägga till ifsatser men fick det inte att fungera. Kan någon fixa denna kod så att det inte går att skriva ett tal lika med noll?
<!--
function kontrollera(obj){
var svar = obj.svar.value;
var pattern = /^(([1-9]\d*)|(\d+[\.,]\d+))$/;
flag = pattern.test(svar);
if(flag){
return true;
}
else{
alert("Du måste skriva in ett tal.");
document.fraga.svar.focus();
return false;
}
}
//-->
Tacksam för svar!
------------------
MVH
Harback
[Redigerat av Harback den 23 sep 2001]
spangoMedlem sedan juni 20006 147 inlägg
Eh, hallå? Du använder inte min regexp. Jag skrev:
/^[1-9]\d*([.,]\d+)?$/
Du använder:
/^(([1-9]\d*)|(\d+[\.,]\d+))$/
Men du behöver ju verkligen inte använda regexpar! Det vore så vansinnigt mycket enklare att säga nå i stil med vad Erik sa.
var resultat = parseFloat(foo);
if(isNaN(resultat) || resultat == 0)
alert("hallå där!");
------------------
Does it matter that this waste of time is what makes a life for you?
HarbackMedlem sedan juni 2001212 inlägg
Nä, jag ändrade lite i den. Testade lite...
Men jag måste ha RegExp i ett hörn iallafall eftersom jag ska göra så att både punkt och komma kommer igenom.
Jag la till efter if(flag) den ifsats Erik körde med att om svar < 1 (egentligen borde det ju vara svar = 0?)så går det inte men jag fick det inte att fungera. Kan någon hjälpa mig att lägga ihop dom satserna eller ska jag göra på något annat sätt kanske?
------------------
MVH
Harback
JojoxxMedlem sedan juni 20004 306 inlägg
Men jag måste ha RegExp i ett hörn iallafall eftersom jag ska göra så att både punkt och komma kommer igenom.
Men använd då ett regexp för att få ett validt decimaltal.
var svar=obj.svar.value.replace(/,/,'.');
------------------
/ J
[Redigerat av Jojoxx den 23 sep 2001]