Regexp...

JavaScript

10 svar · 352 visningar · startad av Harback

Medlem sedan juni 2001206 inlägg
Trådstart#1

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+)&#0124;(\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?

Medlem sedan maj 200010 687 inlägg
#2

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å.. :)

Medlem sedan juni 20004 308 inlägg
#3

Ja. Regexp är smidigt, men kanske lite överarbetat i ett sådant exempel. :)

Medlem sedan juni 2001206 inlägg
#4

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?

Medlem sedan juni 2000277 inlägg
#5

kan du inte bara lägga till
if(flag && svar != 0)
...

Medlem sedan juni 20008 205 inlägg
#6

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.

Medlem sedan juni 2001206 inlägg
#7

Härligt!

Medlem sedan juni 2001206 inlägg
#8

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*)&#0124;(\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!

Medlem sedan juni 20008 205 inlägg
#9

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) &#0124;&#0124; resultat == 0)
alert("hallå där!");
Medlem sedan juni 2001206 inlägg
#10

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?

Medlem sedan juni 20004 308 inlägg
#11

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(/,/,'.');

256 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
115 ms — ändringar (db)