12. februar 2012 - 16:55Der er
19 kommentarer og 1 løsning
Hjælp til eregi
Hej
Jeg har denne der kontrollerer at et tal ikke indeholder andet end tal med 2 decimaler.
!eregi('^[0-9]+,[0-9]{0,2}$', $value)
Mit problem er dog at den kræver at der er 2 decimaler.
Er der en venlig sjæl der vil rette den til således: - at den også accepterer tal uden decimaler - at den også accepterer tal med en enkelt decimal - at den ikke accepterer tal der starter med 0
I det viste mønster, tror jeg ikke, det betyder en kvart malmbjælde, men en parentes opretter og gemmer et subpattern. Ved større og komplekse RegExp's kan de sløve en del - og bør defor nok kun benyttes, når man reelt har brug for dem =)
[/pre] 1 er ikke gyldigt. 10 er gyldigt. 10,0 er gyldigt. 10,1 er gyldigt. 10,12 er gyldigt. 10,123 er ikke gyldigt. 01 er ikke gyldigt. 01,12 er ikke gyldigt. 123 er gyldigt. 0123 er ikke gyldigt. [/pre]
Alt er som ønsket, med undtagelse af tal bestående af ét ciffer. Den betragtes også som ugyldig.
Følgende skal accepteres: - Positive tal uden decimaler - Positive tal med 1 decimal (',' som seperator) - Positive tal med 2 decimaler (',' som seperator)
Indhold med alle former for bogstaver og tegn (med undtagelse af komma) skal afvises. Tal der starter med '0' skal afvises. Negative tal skal afvises.
Som OleBole nævner, så bruges RegExp til mønstersøgning i en string. I dette tilfælde vil jeg anbefale, at man udarbejder en simpel funktion, som validerer tallet for dig. Funktionen skal returnere true/false - alt efter om tallet opfylder dine krav. Jeg har lavet et eksempel, som meget gerne skulle klare det for dig.
foreach ($array as $value) { if (!CheckNumber($value)) { echo $value." er ikke gyldigt.<br>"; } else { echo $value." er gyldigt.<br>"; } }
?>
Ovenstående returnerer følgende output:
1 er gyldigt. 10 er gyldigt. 10,0 er gyldigt. 10,1 er gyldigt. 10,12 er gyldigt. 10,123 er ikke gyldigt. 01 er ikke gyldigt. 01,12 er ikke gyldigt. 123 er gyldigt. 0123 er ikke gyldigt.
Funktionen kan muligvis effektiveres, og flere krav kan medtages. Dette må du rode lidt med. :-)
#13. Ingen grund til sarkasme. Jeg anbefalede en funktion, da jeg er af den overbevisning, at når man skal validere tal som disse, er funktioner mere overskuelige/mere anvendelige. Det er nemmere at tilføje flere krav, hvis personen ønsker dette. Et ocean af funktionskald? Tjo, det er vel hvad man gør det til. Begge måder opfylder personens krav.
Det skader ikke at lade spørgeren stifte bekendtskab til begge metoder. Det vil forhåbentligt kun have den positive effekt, at det udvider spørgerens horisont.
Jo, al grund til sarkasme. Hvis du har et godt forslag, så begrund det dog i stedet for at holde begrundelsen for dig selv.
"når man skal validere tal som disse, er funktioner mere overskuelige/mere anvendelige" >> Ikke, hvis man har lært (sig) at bruge RegExp.
"Det er nemmere at tilføje flere krav, hvis personen ønsker dette" >> Vi er rigtig mange, der synes det stik modsatte - men det hænger nok igen sammen med, hvad man kan.
"Begge måder opfylder personens krav." >> Ja, men hvorfor må spørgeren ikke træffe et informeret valg?
Hvis jeg ønsker at bestille en saftig oksebøf, og tjeneren i stedet anbefaler mig stegt lever, argumenterer han naturligvis for, hvorfor han anbefaler et alternativ. Det er da helt almindelig logik =)
Jeg beklager; jeg vidste ikke vi sad på skolebænken, hvor argumentationer er alfa omega for, hvad spørgeren vælger.
Det var bestemt ikke min intention ved deltagelsen i denne tråd at signalere, at RegExp ikke er nogen relevant løsning - selvom det godt kan fremstå sådan. "I dette tilfælde vil jeg anbefale, at man udarbejder en simpel funktion, som validerer tallet for dig" vil jeg nok have omformuleret til "En anden måde at gøre det på..." Jeg er personligt ikke fan af, at RegExp bruges i tilfælder som disse. Her er argumentationen anvendelighed og overskuelighed, som lige så godt kan være en smagssag.
Ikke, hvis man har lært (sig) at bruge RegExp. --- [..]men det hænger nok igen sammen med, hvad man kan.. > Jeg ved ikke, hvad tanken bag nedgørelsen af mine kompetencer skyldes. At jeg vælger at opstille en anden metode indikerer nødvendigvis ikke, at jeg ikke er bekendt med RegExp.
Ja, men hvorfor må spørgeren ikke træffe et informeret valg? > Har jeg givet udtryk for det? Spørgeren har fuld ret til at træffe sit eget valg - at spørgeren har flere valg at vælge mellem er vel blot en bonus.
Hele meningen med Eksperten er, at man kan lære noget.
Om det er en saglig begrundelse eller blot, om man 'er fan' af den ene eller anden løsning er en overordentlig vigtig information, som bør følge en anbefaling.
Jeg nedgør ikke dine kompetencer, og skriver ikke, at du 'ikke er bekendt med RegExp', men du skriver jo selv, at du ikke finder en RegExp særlig overskuelig. Det taler jo for, du ikke er særlig stærk i RegExp.
Uden informationer om to løsninger er det pr. definition umuligt, at foretage et informeret valg mellem dem.
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.