Tekstveld prijs formatting

Status
Niet open voor verdere reacties.

Lapixx

Gebruiker
Lid geworden
2 mei 2008
Berichten
132
Hoi,

Ik heb een tekstveld waar een prijs moet worden ingevuld. Op zich niets moeilijks, maar ik wil er met JavaScript voor zorgen dat het ook formatted wordt als een prijs. Dat wilt zeggen: Alleen cijfers en komma accepteren, indien nodig een komma toevoegen, en indien nodig extra nullen toevoegen op het einde (5,5 wordt dan 5,50).

Na wat geknipt en plakt te hebben, bleek het volgende al redelijk te werken:

[JS]function formatprice(num,sep){
if(num.indexOf(sep)<0){
num+=sep+"00";
}
else if(num.indexOf(sep)==num.length-1){
num+="00";
}
else if(num.indexOf(sep)==num.length-2){
num+="0";
}
return num;
}[/JS]

Waarbij sep een komma is bij het aanroepen van de functie, bij het onchange event van een tekstveld.

Nu hoef ik dus alleen de letters te filteren (lees: alleen cijfers en een komma toestaan), maar ik heb absoluut geen idee hoe dat het efficiëntst met JS kan. Iemand een idee?

Alvast bedankt
 
Dat kun je met een regexp doen. Ik weet het fijne er niet van, dus ik kan je geen kant en klare oplossing geven, maar daar kom je met Google vast een heel eind in.

Ook kun je dan zorgen dat je niet de letters eruit haalt, maar dat je alleen de cijfers en de komma overhoudt (ja daar zit een verschil in ;)).
 
lees: alleen cijfers en een komma toestaan
nou, mischien zoiets:
[js]
if(num.toString().match(/^[\-]?\d*\.?\d*$/) !== null)
{
//is getal
}else{
//geen getal
}
[/js](de .toString() kan denk ik wel weg, ligt er een beetje aan wat voor format de invoer heeft). De match accepteert het volgende:
Code:
-1
1
1.1
-1.1
maar niet
Code:
-1,1
1,1,1
a.3
etc.
 
Laatst bewerkt:
Bedankt voor jullie snelle reacties :)

Is het dan ook mogelijk om de niet-toegestane tekens te wissen? Ik neem aan dat er wel een soort regex_replace functie bestaat in JS.. *zoekt en probeert*

EDIT: hmm, een directe num=num.replace(/^[\-]?\d*\.?\d*$/,""); werkte niet zo goed :') Ik zie nu ook dat ik een 'tegenovergestelde' regex nodig heb, een replace voor alle NIET cijfers of komma's, naar een lege string.

EDIT2: Ah, oplossing gevonden :)

[JS]function formatprice(num,sep){
num=num.replace(".",",");
num=num.replace(/[^0123456789,]/g,"");
if(num.indexOf(sep)<0){
num+=sep+"00";
}
else if(num.indexOf(sep)==0){
num="0"+num;
}
else if(num.indexOf(sep)==num.length-1){
num+="00";
}
else if(num.indexOf(sep)==num.length-2){
num+="0";
}
return num;
}[/JS]

Werkt prima, veranderd een punt in een komma, verwijderd alle niet-cijfers en niet-komma's, voegt een nul toe voor de komma of na de komma waar dat nodig is. :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan