Avatar billede lone_a_p Praktikant
09. november 2003 - 14:39 Der er 14 kommentarer og
1 løsning

validate valuta

Hej,

Er der nogen der har en løsning på, hvordan man tjekker for om input er dansk valuta format?

Altså eks:
12,34
234.235,34
2.345
osv
Avatar billede Slettet bruger
09. november 2003 - 16:14 #1
Umiddelbart tror jeg, det her virker:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<script type="text/javascript">
function valider(frm) {
  val = frm.valuta.value;
  if (!val.match(/^[0-9.,]+$/)) {
    alert("Ulovlige tegn.");
    frm.valuta.focus();
    return false;
  }
  if (val.indexOf(".") != -1) {
    temp = val.split(".");
    if (temp[temp.length - 1].indexOf(",") != -1)
      temp[temp.length - 1] = temp[temp.length - 1].split(",")[0];
    for (i = 0; i < temp.length; i++) {
      if (temp[i].indexOf(",") != -1) {
        alert("Ulovlig brug af komma.");
        frm.valuta.focus();
        return false;
      }
      if ((i == 0 && temp[i].length > 3) || (i != 0 && temp[i].length != 3)) {
        alert("Ulovlig brug af punktum.");
        frm.valuta.focus();
        return false;
      }
    }
  }
  if (val.indexOf(",") != -1) {
    temp = val.split(",");
    if (temp.length > 2) {
      alert("For mange kommaer.");
      frm.valuta.focus();
      return false;
    }
    if (temp[1].length != 2) {
      alert("Der skal være to decimalpladser efter kommaet.");
      frm.valuta.focus();
      return false;
    }
  }
  return true;
}
</script>
</head>
<body>
<form onsubmit="return valider(this);">
<input type="text" name="valuta" /> <input type="submit" value="O.k." />
</form>
</body>
</html>
Avatar billede Slettet bruger
09. november 2003 - 16:19 #2
Du kan også se den her:
http://www.phoenixv.dk/exp/valuta.html
Avatar billede roenving Novice
09. november 2003 - 20:18 #3
En langsom debugging (gennemlæsning af koden !-) viser ikke nogen fejl, så du har nok fået hvad du skal bruge, lone_a_p ...


Men phoenixv, hvorfor laver du: i == 0 && temp[i].length > 3 ?-)

-- er det ikke nemmere bare at: temp[0].length > 3 !-)
Avatar billede Slettet bruger
09. november 2003 - 20:22 #4
Nja, koden bliver, så vidt jeg kan se, nogle linjer længere af det. Og selve ydelsen forringes jo ikke væsentligt, med mindre vi snakker tal i googolplexstørrelsen... :)
Avatar billede roenving Novice
09. november 2003 - 20:39 #5
*g*

-- men det gør jo ikke noget at du bare udskifter det på den plads den har ?-)

-- selvfølgeligt overflødigt at spørge på det samme flere gange, men det gør du jo alligevel !-)

-- og hvis det skal være kort, og lone_a_p 'bare' skal have een slags alert kan det jo laves i et par linjer:

var reg = /^((\d{1,3}\.)?(\d{3}\.)*(\d{3})|(\d{1,3}))(\,\d{2})?$/;
function checkVal(fld){
        if(!fld.value.match(reg))alert('Fejl i beløbsangivelse');
}
Avatar billede roenving Novice
09. november 2003 - 20:51 #6
-- og den ene linje kunne også forenkles lidt :

var reg = /^\d{1,3}(\.\d{3})*(\,\d{2})?$/;
Avatar billede lone_a_p Praktikant
09. november 2003 - 21:52 #7
Hej roenving,

Jeg har prøvet din løsning, og den ser ud til at virke!! - jeg er ret begejstret over at det kan gøres på så lidt plads ...

Jeg har aldrig set den "skrive-måde" før, og jeg vil helst forstå de koder, som jeg laver ... derfor vil jeg meget gerne have en uddybende forklaring på, hvad det er der sker ... eller link til en god forklaring??

Jeg giver gerne flere point end de nuværende, for jeg er faktisk ret målløs over, at det kan gøres på én linje ... der er vist en der kender sine koder der ;o)
Avatar billede lone_a_p Praktikant
09. november 2003 - 22:02 #8
og hvad nu hvis der må være 0, 1 eller 2 kommaer ...
Avatar billede roenving Novice
09. november 2003 - 22:20 #9
Regular expressions er en ret udbredt tekst-sammenlignings-/-søgnings- og -udskiftning-metode, som bruges i en hel række scripting-sprog, med i praksis samme syntaks for selve det regulære udtryk !-)

-- selv har jeg faktisk kun een ressource liggende til eksempler på koder:
http://www.regexlib.com/Default.aspx

-- og een ressource til at se opbygning i forhold til java script:
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/regexp.html

-- men skal man dissekere ovenstående udtryk (det korte !-) bliver det til:

/ og / er start og slut på et regulært udtryk (til forskel fra en tekststrengs "")

^ og $ er henholdsvis fra det allerførste tegn og til det allersidste

\ betyder at det efterfølgende skal tages bogstaveligt selv om det måske har en speciel regExp-betydning (og det er også standard 'escape-tegn' i mange andre sprog)

\d matcher kun på tal -- og er et af en hel del forskellige special-sekvenser

{1,3} og {3} betyder henholdsvis 1-3 tegn og 3 tegn af den forudgående

() betyder at det indenfor skal tænkes som en gruppe (og kan bruges til avancerede udskiftninger, da den matchede værdi indenfor kan fyldes tilbage i en ny streng !-)

* betyder at det foregående kan forekomme 0 eller flere gange -- her præcis et punktum plus 3 cifre (\.\d{3}) ...

? betyder at det foregående kan forekomme højst een gang -- her præcis et komma plus nøjagtig 2 cifre (\,\d{2})

-- endnu et par af de rigtig nyttige kunne være:

+ som betyder at det skal forekomme en eller flere gange

\w som matcher bogstaver, tal og underscore

{4,} som er en afart af de tidligere nævnte antals-ting, her 4 eller flere af det foregående

[] som bruges til at angive flere tegn/koder som gerne må være det ene eller det andet

| som betyder eller (logisk eller -- ofte brugt sammen med grupperinger i paranteser !-)

[l-s] som betyder at noget skal falde indenfor det angivne interval

[^l-s] som betyder at noget skal falde _udenfor_ det angivne interval

-- endelig er der to modifiers som kan gøre livet lettere overfor søgninger i større strenge:

EFTER det sidste /
g som betyder global søgning og
i som betyder case Insensitive, altså match på både store og små bogstaver -- der skal det nævnes at det er den lokale sprogindstilling, som sætter grænserne, så du på en dansk pc vil genkende Æ som æ, men den vil ikke du udenfor skandinavien !-)

Det blev til en lille roman og en ultrakort indføring i regExp, men du kan jo bare spørge noget mere i http://www.eksperten.dk/kat/105 hvis du har specialiteter, du kunne tænke dig at finde ...

-- og velbekomme '-)
Avatar billede roenving Novice
09. november 2003 - 23:02 #10
Et lille eksempel:

var reg = /.*(roenving|rønving).*(eksperten|exp).*/gi;

gltekst = "Lige dette er skrevet af Rønving, som jeg engang imellem støder ind i på Eksperten.dk"

var nytekst = gltekst.replace(reg, "Dette er lavet af \$1 fra \$2");

som vil give nyteksten: "Dette er lavet af Rønving fra Eksperten"

hvor . betyder et hvilket som helst tegn og

\$1 betyder den første matchede gruppe (i paranteser !-)
Avatar billede roenving Novice
09. november 2003 - 23:09 #11
Hvordan må de flere kommaer forekomme ?-)
Avatar billede lone_a_p Praktikant
09. november 2003 - 23:14 #12
undskyld ... jeg mente decimaler!! - det er vist ved at være min sengetid!!!
Avatar billede roenving Novice
09. november 2003 - 23:15 #13
Denne styrer at der skal være præcis to decimaler:

(\,\d{2})
Avatar billede roenving Novice
09. november 2003 - 23:18 #14
Så hvis der må være et vilkårligt antal decimaler ser den således ud:

(\,\d*)

-- og hvis den skal tillade enten intet komma eller et komma og et eller to tal:

(\,\d{1,2})?
Avatar billede lone_a_p Praktikant
09. november 2003 - 23:18 #15
hej, du kan hente ekstra point på:

http://www.eksperten.dk/spm/425386

tusind tak for dit svar (samt uddybende)
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