Avatar billede compac Seniormester
08. november 2006 - 14:37 Der er 1 kommentar og
1 løsning

Datovalidering igen igen

Jeg har set et eksempel som erik har lavet i ASP på datovalidering:

<%

  function two(s)
    if len(s)=1 then
      two="0" & s
    else
      two=s
    end if
  end function

  function datotjek(dato)
    dim regex,matches,match
    set regex = new regexp
    regex.pattern = "^ *([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) *$"
    regex.global = false
    regex.ignorecase = false

    set matches = regex.execute(dato)

    if matches.count>0 then
      set match=matches(0)
      datotjek=match.submatches(0) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(2))
      set matches=nothing
      exit function
    end if
    set matches=nothing

    regex.pattern = "^ *([0-9]{4})([0-9]{2})([0-9]{2}) *$"

    set matches = regex.execute(dato)

    if matches.count>0 then
      set match=matches(0)
      datotjek=match.submatches(0) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(2))
      set matches=nothing
      exit function
    end if
    set matches=nothing

   
regex.pattern = "^ *([0-9]{1,2})-([0-9]{1,2})-([0-9]{4}) *$"

    set matches = regex.execute(dato)

    if matches.count>0 then
      set match=matches(0)
      datotjek=match.submatches(2) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(0))
      set matches=nothing
      exit function
    end if
    set matches=nothing

    datotjek="FEJL"
  end function
 
  response.write datotjek("2004-06-01") & "<br>"
  response.write datotjek("  2004-6-1  ") & "<br>"
  response.write datotjek("  20040601  ") & "<br>"
  response.write datotjek("  1-6-2004  ") & "<br>"
  response.write datotjek("  øllebrød  ") & "<br>"

%>

- er der nogen der vil hjælpe mig med at omskrive det til PHP?
Avatar billede yvette Nybegynder
08. november 2006 - 14:57 #1
ja hvis jeg forstod hvad den tekst der gør :) Jeg fatter absolute intet af det asp sjov, så hvis du kunne forklare lidt istedet?
Avatar billede coderdk Praktikant
08. november 2006 - 15:05 #2
Her er en:

<?php

    function datotjek( $str )
    {
        $result = false;
        if ( preg_match( "#^\s*(\d{4})[/-](\d{1,2})[/-](\d{1,2})\s*$#", $str, $m )
            || preg_match( "#^\s*(\d{4})(\d{2})(\d{2})\s*$#", $str, $m ) )
        {
            if ( $m[2] > 12 )
            {
                $result = strtotime( "$m[1]-$m[3]-$m[2]" );
            }
            else
            {
                $result = strtotime( "$m[1]-$m[2]-$m[3]" );
            }
        }
        elseif ( preg_match( "#^\s*(\d{1,2})[/-](\d{1,2})[/-](\d{4})\s*$#", $str, $m ) )
        {
            if ( $m[2] > 12 )
            {
                $result = strtotime( "$m[3]-$m[1]-$m[2]" );
            }
            else
            {
                $result = strtotime( "$m[3]-$m[2]-$m[1]" );
            }
        }
        return $result;
    }

    $testdates = array(
            "2006-10-08"
            ," 2006-1-8"
            ," 2006/1/8"
            ,"  20061210  "
            ," 2/3-2006"
            ," sweet zombie jesus"
        );
       
    foreach ( $testdates as $date )
    {
        echo "'$date' er ";
        if ( ( $dato = datotjek( $date ) ) === false )
        {
            echo "ikke en dato";
        }
        else
        {
            echo strftime( "en dato! %d/%m-%Y<br>", $dato );
        }
    }
   
?>
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