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?
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;
}
}
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?
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
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;
}
}
//-->
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.
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?