webForumDet fria alternativet

Samma gamla preg_match, ja vet

PHP

4 svar · 227 visningar · startad av Jontto

Medlem sedan okt. 2001125 inlägg
Frågan#1

Hej!

Hur kollar jag att en sträng är en giltig vecka i formen "envecka-en_vecka_som_är_större_men_mindre_än_sista_i_året".

Typ:
12-43 (rätt)
23-21 (fel)
1-53 (kanske rätt)
1-9 (brabra)

Poängen är att det ska finnas ett "-" i mitten och två (giltiga) veckor vid sidan om (som tillsammans också är giltiga).

Har sökt, men som många andra så lägger jag mig på golvet som en hund som mött sin segrare när det gäller regexp.

...ska lära mig dem ngngång ännu före jag dör.... *muttra för sig själv* :x

//jontto

Medlem sedan sep. 20021 655 inlägg
#2
<?php

$veckorStr = '10-52';

if(preg_match('/^(\d{1,2})-(\d{1,2})$/', $veckorStr, $matches)){
    if($matches[1] < $matches[2] &&
       $matches[1] > 0 &&
       $matches[2] <= max(date('W', strtotime('31 december')),52))
        echo 'tillåtet intervall';
    else
        echo 'otillåtet intervall';
} else
    echo 'otillåtet intervall';

?>
Medlem sedan okt. 2001125 inlägg
#3

Tack så mycket!

Medlem sedan okt. 2001125 inlägg
#4

Hmm....verka vara ngt i preg_matchen som inte fungerar. När jag kör koden

$veckorStr = "10-52";

if(preg_match('/^(d{1,2})-(d{1,2})$/', $veckorStr, $matches)){
    if($matches[1] < $matches[2] &&
       $matches[1] > 0 &&
       $matches[2] <= max(date('W', strtotime('31 december')),52))
        echo 'tillåtet intervall';
    else
        echo 'otillåtet intervall 1';
} else
    echo 'otillåtet intervall 2';

så ger det ut bara "otillåtet intervall 2" hela tiden, även om veckorna är ok.

Medlem sedan okt. 2001125 inlägg
#5

där saknades visst ett \ framför d, så det skulle vara "\d" på båda ställen istället :OO

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)