Avatar billede hrole Mester
06. marts 2010 - 21:43 Der er 7 kommentarer og
1 løsning

Problem med preg_match

Hej,

Jeg har følgende:
    if (!preg_match('/^((\-)|(0[0-9]|[12][0-9]|3[01])
  • (0[0-9]|1[012])[-](1[0-9][0-9][0-9]))$/', $_POST['dato'])) {
    $fejl['dato'] = 'Fejl i dato.'; }

Tanken var at enten skulle dato skrives dato-måned-år eller hvis dato ikke oplyses skriver man -. Problemet er hvis man angiver -, udskrives --. Hvor er fejlen?
Avatar billede hrole Mester
06. marts 2010 - 21:44 #1
Fejl i ovenstående: prikken skal udskiftes med
Avatar billede hrole Mester
06. marts 2010 - 21:45 #2
Nå, eksperten formaterer koden. Prikken skal erstattes med [ - ] uden mellemrum
Avatar billede nicklasb Nybegynder
06. marts 2010 - 21:56 #3
Hvor udskriver du resultatet? Du gemmer ikke grupperne fra dit match nogle steder. Hvis du som tredje argument til preg_match(..., ..., $result) skriver en variabel, vil stregen stå i $result[1], mens de enkelte led i datoen vil stå i $result[1], $result[2] og $result[3].

Jeg forstår ikke helt hvad det er du mangler?
Avatar billede nicklasb Nybegynder
06. marts 2010 - 22:04 #4
.. og så er der ingen grund til at lave et sæt af et enkelt tegn, talrækken 0-9 kan skrives som \d og gentagne grupper kan samles. Følgende vil matche de samme strenge som den du har skrevet:

^((-)|(0\d|[12]\d|3[01])-(0\d|1[0-2])-(1\d{3}))$

Du kan desuden ikke skrive datoer efter 1999.
Avatar billede hrole Mester
06. marts 2010 - 22:06 #5
preg_matchen tjekker et felt i en form, efter submit og hvis indtastningen er gyldig indsættes værdien i en mysqldatabase og værdien skrives på siden. Hvis værdien ikke er gyldig skrives fejlmeddelelsen.
Avatar billede nicklasb Nybegynder
06. marts 2010 - 22:10 #6
Hvordan ser linjen ud, hvor datoen skrives i databasen? $_POST['dato'] -variablen bliver ikke ændret af at du matcher på den. Hvis du indtaster "-" som værdi, er variablen af $_POST['dato'] også "-" - og med mindre du overskriver variablen, ændrer den sig ikke.
Avatar billede hrole Mester
06. marts 2010 - 22:24 #7
ja selvfølgelig, det havde jeg overset. Senere i scriptet ændre jeg dato til formatet år-måned-dag og det er her det går galt. Tak for hjælpen. Smid svar.
Avatar billede nicklasb Nybegynder
06. marts 2010 - 22:26 #8
:)
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
Kurser inden for grundlæggende programmering

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