Avatar billede michaeltryl Seniormester
24. februar 2007 - 13:30 Der er 12 kommentarer og
1 løsning

kort Regular Expressions spørgsmål

Jeg har siddet og leget lidt med Regular Expressions, men er i tvivl om det er rigtig hvad jeg har gjort. Det virker fint, men det kan være jeg har overset en lille ting. håber der er en som hurtigt vil kigge på det.

det jeg vil er at tjekke om formatet i start er
XX:XX:XX hvor X er lig med tal

<?
$start = "11:00:00";
if (preg_match("/^[0-9]{2}:[0-9]{2}:[0-9]{2}/", $start))
{
echo "gyldigt klokkeslet<br/>";
}
?>
Avatar billede erikjacobsen Ekspert
24. februar 2007 - 13:38 #1
Vi du tillade "11:00:00 øllebrød"  ??
Avatar billede coderdk Praktikant
24. februar 2007 - 13:39 #2
Ser fint ud, bortset fra $ mangler før sidste / (din vil matche "11:00:00hest") - Det kan også skrives:

<?
$start = "11:00:00";
if (preg_match("/^(\d{2}:){2}\d{2}$/", $start))
{
    echo "gyldigt klokkeslet<br/>";
}
?>
Avatar billede erikjacobsen Ekspert
24. februar 2007 - 13:45 #3
Vi kan jo også spørge om det er tilladt at skrive

1) "7:00:00"    (det er det ikke nu)
2) "99:99:99"  (det er det nu)

Ikke fordi 2) nødvendigvis skal klares med et regulært udtryk, men jeg vil normalt ikke opfatte det som et "gyldigt klokkeslet<br/>"
Avatar billede michaeltryl Seniormester
24. februar 2007 - 13:57 #4
godt jeg spurgte herinde der var lige en del ting jeg ikke havde taget højde for så hæver lige points.
Vil det være bedre at dele tiden op i timer, minutter og sekunder og så tjekke om timer ligger mellem 00 og 23 og minutter og sekunder ligger mellem 00 og 59
og istedet for preg_match så bruge is_numeric på timer, minutter og sekunder?

for:
1) 7:00:00"    (er lovilgt at skrive)
2) "99:99:99" (er ikke lovligt da det skal være et gyldigt klokkeslet mellem 00:00:00 og 23:59:59)
Avatar billede coderdk Praktikant
24. februar 2007 - 14:36 #5
Hvad med blot:

list( $h, $m, $s ) = explode( ":", $start );
if ( $h >= 0 && $h <= 23 && $m >= 0 && $m <= 59 && $s >= 0 && $s <= 59 )
{
  echo "Gyldigt tidspunkt";
}
Avatar billede erikjacobsen Ekspert
24. februar 2007 - 14:46 #6
Den med explode er kun god nok, hvis den er smuttet igennem vores preg_match først. Og så behøver du ikke tjekke om den er større end 0 - det vil den være.

Vi kan jo lege med med regulære udtryk (selv om jeg måske nok synes det grænser til misbrug). F.ex for klokkeslet 

  if (preg_match("/^(0?[0-9]|1[0-9]|2[0-3]):[0-9]{2}:[0-9]{2}$/", $start))

tilsvarende er muligt med minutter og sekunder.
Avatar billede michaeltryl Seniormester
24. februar 2007 - 15:38 #7
følgende ser ud til at virke som det skal

$start = "23:59:00";

if (preg_match("/^(\d{2}:){2}\d{2}$/", $start))
{
list( $h, $m, $s ) = explode( ":", $start );
if ( $h >= 0 && $h <= 23 && $m >= 0 && $m <= 59 && $s >= 0 && $s <= 59 )
{
  echo "Gyldigt tidspunkt";
}
}

eneste lille minus er at man skal skrive 2 tal alle tre steder
jeg har prøvet dette, som ikke virker
if (preg_match("/^(\d{1}|{2}:){1}|{2}\d{1}|{2}$/", $start))
og dette
if (preg_match("/^(\d{1|2}:){1|2}\d{1|2}$/", $start))

jeg har ikke leget meget med  ,men har fundet ud af at | betyder 'eller', men det skal sikkert indsættes på en anden måde
Avatar billede erikjacobsen Ekspert
24. februar 2007 - 15:56 #8
if (preg_match("/^(\d{1,2}:){2}\d{2}$/", $start))
Avatar billede plx Nybegynder
24. februar 2007 - 16:01 #9
if(preg_match('/^[0-2]?\d(:[0-5]?\d){2}$/', $start))

kontrollerer, i mit hoved, tiden korrekt, uden brug af efterfølgende if
Avatar billede plx Nybegynder
24. februar 2007 - 16:05 #10
næh, det gør den vel egentlig ikke :)
Avatar billede michaeltryl Seniormester
24. februar 2007 - 16:22 #11
jeps det virker tak for hjælpen. Vil i dele points erikjacobsen og coderdk?
Avatar billede erikjacobsen Ekspert
24. februar 2007 - 16:45 #12
Ingen til mig, tak.
Avatar billede coderdk Praktikant
24. februar 2007 - 17:17 #13
:)
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