/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Simpelt strengproblem
Fra : Peter


Dato : 19-06-06 10:16

Hej

Er der ikke en simpel måde at 'hive' tal-delen af en streng ud i PHP. Jeg
har et tekstfelt, hvor brugerne kan finde på at skrive alt fra ca. 7 kr. til
kr. 7.

Peter H.



 
 
phpartikler.dk (19-06-2006)
Kommentar
Fra : phpartikler.dk


Dato : 19-06-06 10:25

Du kan bruge the regex way til at fjerne alt andet end tallene:

$str = "Prisen er 7 kr. + afgifter + diverse";
$str = preg_replace("/[^0-9]/", "", $str);

Men der er nok et par ting mere du skal tage højde for, f.eks. hvad med 7,95
eller 7.95 ? I ovenstående løsning bliver komma og punktum slettet (det er
dog nemt at modificere). Men bare lige vær' opmærksom på hvad brugeren i sin
vildeste fantasi kunne forestille sig at indtaste (for det kommer til at ske



"Peter" <ichuse@mailx.dk> skrev i en meddelelse
news:44966b4a$0$27587$edfadb0f@dread11.news.tele.dk...
> Hej
>
> Er der ikke en simpel måde at 'hive' tal-delen af en streng ud i PHP. Jeg
> har et tekstfelt, hvor brugerne kan finde på at skrive alt fra ca. 7 kr.
> til kr. 7.
>
> Peter H.
>



Peter (19-06-2006)
Kommentar
Fra : Peter


Dato : 19-06-06 10:47

> $str = "Prisen er 7 kr. + afgifter + diverse";
> $str = preg_replace("/[^0-9]/", "", $str);
>
> Men der er nok et par ting mere du skal tage højde for, f.eks. hvad med
> 7,95 eller 7.95 ? I ovenstående løsning bliver komma og punktum slettet
> (det er dog nemt at modificere).

Det er et af problemerne. Hvordan undgår jeg at 7,75 bliver til 775 eller
for den sags skyld 0.8005 bliver til 8005? Jeg vil gerne give lov til at
bruge 1000-seperator-tegn.

Peter



phpartikler.dk (19-06-2006)
Kommentar
Fra : phpartikler.dk


Dato : 19-06-06 11:44

"Peter" <ichuse@mailx.dk> skrev i en meddelelse
news:4496727c$0$27626$edfadb0f@dread11.news.tele.dk...
>> $str = "Prisen er 7 kr. + afgifter + diverse";
>> $str = preg_replace("/[^0-9]/", "", $str);
>>
>> Men der er nok et par ting mere du skal tage højde for, f.eks. hvad med
>> 7,95 eller 7.95 ? I ovenstående løsning bliver komma og punktum slettet
>> (det er dog nemt at modificere).
>
> Det er et af problemerne. Hvordan undgår jeg at 7,75 bliver til 775 eller
> for den sags skyld 0.8005 bliver til 8005? Jeg vil gerne give lov til at
> bruge 1000-seperator-tegn.
>
> Peter
>

Så ville jeg nok

$str = "Prisen er 7.000.000,95kr. + diverse";
preg_match("/\d[\d.,]*/", $str, $regs);
echo $regs[0];

Så kommer det punktum efter kr nemlig heller ikke med, eller evtentuelle ,
og . før tallet begynder.



Peter (19-06-2006)
Kommentar
Fra : Peter


Dato : 19-06-06 13:02

Hold kæft! Det virker bare - takker!

Peter

"phpartikler.dk" <webmaster@phpartikler.dk> wrote in message
news:44967fe9$0$27539$edfadb0f@dread11.news.tele.dk...
> "Peter" <ichuse@mailx.dk> skrev i en meddelelse
> news:4496727c$0$27626$edfadb0f@dread11.news.tele.dk...
>>> $str = "Prisen er 7 kr. + afgifter + diverse";
>>> $str = preg_replace("/[^0-9]/", "", $str);
>>>
>>> Men der er nok et par ting mere du skal tage højde for, f.eks. hvad med
>>> 7,95 eller 7.95 ? I ovenstående løsning bliver komma og punktum slettet
>>> (det er dog nemt at modificere).
>>
>> Det er et af problemerne. Hvordan undgår jeg at 7,75 bliver til 775 eller
>> for den sags skyld 0.8005 bliver til 8005? Jeg vil gerne give lov til at
>> bruge 1000-seperator-tegn.
>>
>> Peter
>>
>
> Så ville jeg nok
>
> $str = "Prisen er 7.000.000,95kr. + diverse";
> preg_match("/\d[\d.,]*/", $str, $regs);
> echo $regs[0];
>
> Så kommer det punktum efter kr nemlig heller ikke med, eller evtentuelle ,
> og . før tallet begynder.
>



Michael Zedeler (19-06-2006)
Kommentar
Fra : Michael Zedeler


Dato : 19-06-06 14:04

Peter wrote:
> Hold kæft! Det virker bare - takker!

Hej Peter.

1. http://www.usenet.dk/netikette/citatteknik.html

2. Du er nødt til at beslutte om du vil bruge punktum eller komma som
grupperingstegn, med mindre du vil rode dig ud på meget dybt vand for at
parse tallene korrekt. Det glemte jeg at skrive i min anden posting.

Et eksempel: hvordan skal dit program parse strengen "1,000"? Står der
bare 1 eller står der 1000?

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

phpartikler.dk (19-06-2006)
Kommentar
Fra : phpartikler.dk


Dato : 19-06-06 15:28


> 2. Du er nødt til at beslutte om du vil bruge punktum eller komma som
> grupperingstegn, med mindre du vil rode dig ud på meget dybt vand for at
> parse tallene korrekt. Det glemte jeg at skrive i min anden posting.
>
> Et eksempel: hvordan skal dit program parse strengen "1,000"? Står der
> bare 1 eller står der 1000?
>
> Mvh. Michael.
> --


Jeg er helt enig, det er en kæmpe kilde til fejl at lade brugeren taste tal
ind uhæmmet. En fin metode kunne være at skrive til brugeren hvilket format
man ønsker, og samtidig lave et regulært udtryk (måske flere) der tjekker om
inputtet er formateret sådan.



Michael Zedeler (19-06-2006)
Kommentar
Fra : Michael Zedeler


Dato : 19-06-06 12:37

phpartikler.dk wrote:
> "Peter" <ichuse@mailx.dk> skrev i en meddelelse
> news:4496727c$0$27626$edfadb0f@dread11.news.tele.dk...
>
>>>$str = "Prisen er 7 kr. + afgifter + diverse";
>>>$str = preg_replace("/[^0-9]/", "", $str);
>>>
>>>Men der er nok et par ting mere du skal tage højde for, f.eks. hvad med
>>>7,95 eller 7.95 ? I ovenstående løsning bliver komma og punktum slettet
>>>(det er dog nemt at modificere).
>>
>>Det er et af problemerne. Hvordan undgår jeg at 7,75 bliver til 775 eller
>>for den sags skyld 0.8005 bliver til 8005? Jeg vil gerne give lov til at
>>bruge 1000-seperator-tegn.
>
> Så ville jeg nok
>
> $str = "Prisen er 7.000.000,95kr. + diverse";
> preg_match("/\d[\d.,]*/", $str, $regs);

Ahem. Den matcher også "1....,.,.,1".

Det kommer selvfølgelig an på hvad funktionen skal bruges til, men hvis
det er vigtigt at gøre opmærksom på slåfejl, skal man nok stramme
udtrykket op.

F. eks.

/\d+(?:\d{3}[,.])*[,.]?\d*/

Men det fanger stadigvæk ikke alle tænkelige fejl. Hvis man vil gå linen
ud, skal man checke imod et array af regexes, der indeholder udtryk som
genkende de formater, man vil acceptere.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste