Avatar billede leasing Nybegynder
27. februar 2002 - 10:59 Der er 12 kommentarer og
1 løsning

Validering tal med komma

Jeg skal bruge en validering på flere felter hvor der kun må indtastes tal, 1 komma og 2 decimaler. Jeg kan godt tjekke på om der kun er indtastet tal, men jeg har problemer med at få den sidste del (kommadelen) med i valideringen.

Håber der er nogen der kan løse den.
Avatar billede senj Nybegynder
27. februar 2002 - 11:11 #1
Noget i denne stil?

<html>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
function currencyFormat(fld, milSep, decSep, e) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true;  // Enter
key = String.fromCharCode(whichCode);  // Get key value from key code
if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
</script>
</HEAD>
<BODY>
<form>
Indtast værdi:
<input type=text name=test length=15 onKeyPress="return(currencyFormat(this,',','.',event))">
</form>
</html>
Avatar billede leasing Nybegynder
27. februar 2002 - 11:17 #2
Kan man ikke få den til at bruge et rigtigt komma istedet for et punktum??
Avatar billede senj Nybegynder
27. februar 2002 - 11:35 #3
Jo da:

<html>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function currencyFormat(fld, milSep, decSep, e) {
var sep = 0;
var milSep = ".";
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true;  // Enter
key = String.fromCharCode(whichCode);  // Get key value from key code
if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
</script>
</HEAD>
<BODY>
<form>
Indtast værdi:
<input type=text name=test length=15 onKeyPress="return(currencyFormat(this,',',',',event))">
</form>
</html>
Avatar billede leasing Nybegynder
27. februar 2002 - 11:40 #4
Umiddelbart ser det ud til at dække det jeg ønsker. Jeg skal lige prøve...vender tilbage i morgen.
Avatar billede senj Nybegynder
27. februar 2002 - 11:41 #5
Oki doki
Avatar billede ghost1 Nybegynder
27. februar 2002 - 12:53 #6
Inden du giver de points videre... så vil jeg foreslå dig at bruge regulære udtryk til at løse problemet, så kan du skrive det hele på et par linjer... skriv endelig tilbage hvis du er interesseret i den løsning :) - bpj@dfu.min.dk
Avatar billede leasing Nybegynder
27. februar 2002 - 14:17 #7
ghost1> Jeg vil da gerne se din løsning på mit spørgsmål.
Avatar billede jakoba Nybegynder
28. februar 2002 - 13:23 #8
mon ikke noget i retning af:

<html>
<head><title>test af regexp</title>

<script type='text/javascript'> <!--

var re = /^-?\d+(,\d{1,2}|)$/ ;

function valider( feltObj ) {
    if ( feltObj.value.match( re ) ) {
        return 'true'
    } else {
        return 'false';
    }
}

// --> </script>

</head>
<body>

<form onsubmit='return false;'>

<input type='text' value="12,34" name='testfelt'>

<input type='button' value='test'
      onclick="alert( 'taltest giver ' + valider( this.form.testfelt ) );">

</form>

</body>
</html>
Avatar billede ghost1 Nybegynder
28. februar 2002 - 17:34 #9
Okay, jeg skulle vist bare have skrevet løsningen i første omgang.. jakoba´s løsning skulle være god nok... regulære udtryk er bare lækre :)
Avatar billede leasing Nybegynder
04. marts 2002 - 09:34 #10
jakoba> Det virker fint. Nu har jeg en masse andre felter som jeg tester i en function. Når jeg skal have dette script til at være en del at min nuværende function hvordan skal dette så gøres?
Avatar billede leasing Nybegynder
12. april 2002 - 09:48 #11
Bedre sent end aldrig...den har vist ligget lidt for længe den her.
Jakoba> Hvis du vil have lidt point så må du lige svare.
Avatar billede senj Nybegynder
06. juni 2002 - 15:57 #12
luk sp.
Avatar billede leasing Nybegynder
07. juni 2002 - 08:15 #13
senj> jeg havde forventet at jakoba ville svare, men nej, så du får alle point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester