Avatar billede cpfrande Nybegynder
16. januar 2006 - 10:07 Der er 6 kommentarer og
1 løsning

Et regex-spørgsmål vedr. tjek af indtastet beløb

Halløjsa,

Jeg har i den sidste 1½ time siddet og stirret mig dum på en lille kode, som jeg nu håber én eller flere af jer kloge hoveder kan være mig behjælpelig med! :-)

Det drejer sig om et beløb, der indtastet i en formular og som så smides videre til validering. Jeg vil gerne have valideret beløbet, således at følgende er korrekt input:
- XX,XX
- XX,X
- X,XX
- X,X
- XX
- X

Mit script tager højde for de 5 først-nævnte, men jeg kan bare ikke få den til at validere som korrekt, når der indtastet kun ét ciffer (f.eks. 1 eller 9).

Min test-kode (hele koden!) ser således ud:
<?php
function test($amount)
{
    if(preg_match("/^([0-9]{1})+(,)*([0-9]{1,2})$/i", $amount, $match))
        return true;
    return false;
}

function check($amount)
{
    echo $amount . " " . (test($amount) ? "OK" : "IKKE OK") . "<br>\n";
}

check("22,212");
check("1,21");
check("122312312,1");
check("13212,");
check("122312312");
check("1");
check("9");
check("12");
check(",32");
?>

Er der nogle kloge hoveder til regex, som lige kan skimte fejlen/forglemmelsen? Jeg har kigget i PHPs dokumentation for det, men tilsyneladende uden held.

- http://dk2.php.net/manual/en/reference.pcre.pattern.modifiers.php- http://dk2.php.net/manual/en/reference.pcre.pattern.syntax.php

Måske jeg bare ikke helt har forstået det.

Jeg siger på forhånd tak for hjælpen! :-)

--
Kristian
Avatar billede polle007 Nybegynder
16. januar 2006 - 10:12 #1
prøv med

/^\\d{1,2}(,\\d{1,2})?$/

\d er det samme som [0-9]
Avatar billede cpfrande Nybegynder
16. januar 2006 - 10:53 #2
Halløjsa,

Jamen nu virker det jo næsten, som jeg vil have det.

Jeg har dog - kan jeg se - nok kommet til at forklare det lidt forkert.

Tallet må gerne være lige så stort det vil, men max 2 decimaler.

Dvs. det må gerne være:
12312,2
323212312,12
3,21

m.v.

Dit script er lavet udfra min forklaring - så fejlen ligger hos mig (beklager jeg!). Jeg har skrevet følgende:
/^\\d(,\\d{1,2})?$/

Det hjalp dog ikke (regnede med min/max var nok til at fjerne det).
Har du en anden mulighed i stedet så?

Nu hvor jeg "har dig her", vil jeg lige høre hvad tegnet \ gør. Jeg har læst om den i dokumentationen i PHP, men forstod ikke helt dens opgave.

På forhånd tak - og beklager min forklaringsfejl.
Avatar billede coderdk Praktikant
16. januar 2006 - 12:06 #3
/^\\d+(,\\d{1,2})?$/
Avatar billede cpfrande Nybegynder
16. januar 2006 - 12:35 #4
Det virker sørme :-)
Må hellere få sat mig bedre ind i regex, det kan jo bruges til en del.

Tak for hjælpen. Hvis I begge smider et svar, så fordeler jeg pointene.
Avatar billede coderdk Praktikant
16. januar 2006 - 12:54 #5
Nej tak, ingen til mig :)
Avatar billede cpfrande Nybegynder
17. januar 2006 - 08:46 #6
Okey, så må polle007 får alle points, men han skal lige ligge et svar! :-)

--
Kristian
Avatar billede cpfrande Nybegynder
08. april 2006 - 13:28 #7
Da ingen har smidt et svar, så gør jeg det for at lukke spørgsmålet.

Tak for hjælpen!

--
Kristian
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