3 votes

PHP - preg_match ?

Je ne suis pas très doué pour les expressions... J'ai regardé quelques tutoriels en ligne, mais je n'y arrive toujours pas. En gros, j'essaie de renvoyer TRUE si une chaîne est formatée comme ceci :

4 chiffres + espace + 2 chiffres et le convertir en date.

Ainsi, la chaîne de caractères ressemblera à : 2010 02 et j'essaie de produire February, 2010 .

J'essaie d'utiliser preg_match mais je continue à obtenir

{ n'est pas un modificateur...

EDITAR

Selon les deux premières réponses, je l'ai modifié, mais j'obtiens une erreur fatale sur la première et la même erreur de modificateur inconnu sur la seconde :

if (preg_match('/([0-9{4}]) ([0-9]{2})/iU', $path_part)) {
    $path_title = date("F, Y",strtotime(str_replace(" ", "-", $path_title)));
}

De plus, je viens d'essayer la version plus approfondie de la première réponse, et bien que l'erreur disparaisse, cela ne change pas la sortie :

$path_part = '2010 02';
if (preg_match('/^(\d{4}) (\d{2})$/', $path_part, $matches)) {
    $path_title = $mon[(int)$matches[2]] . " " . $matches[1]; // prints Feb 2010
}

3voto

codaddict Points 154968

J'essaie de renvoyer VRAI si une chaîne est formatée comme ceci : 4 chiffres + espace + 2 chiffres

return preg_match(/^\d{4} \d{2}$/,$input);

Pour convertir en date, vous pouvez essayer quelque chose comme :

$mon = array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$date_str = "2010 02";

if(preg_match('/^(\d{4}) (\d{2})$/',$date_str,$matches))
{
        print $mon[(int)$matches[2]] . " " . $matches[1]; // prints Feb 2010
}

1voto

bmb Points 2995
$in = "2010 02";
if(preg_match('/([0-9]{4}) ([0-9]{2})/i', $in, $matches)) {
        echo date("F Y", strtotime($matches[2] . "/1/" . $matches[1]));
}

0voto

rATRIJS Points 169

Essayez celui-là...

preg_match('/([0-9{4}]) ([0-9]{2})/iU', $input);

0voto

Stephen Cross Points 550

Sans avoir aucun détail sur votre code réel, ce qui suit devrait fonctionner :

<?php

$str = '2010 02';

$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

if(preg_match('/([0-9]{4}) ([0-9]{2})/', $str, $match) == 1){
    $year = $match[1];
    $month = (int) $match[2];
    echo $months[$month - 1] . ', ' . $year;
}else{
    //Error...
}

?>

0voto

Danon Points 1064

Vous pouvez également utiliser T-Regx bibliothèque

$string = '2010 02';

pattern('\d{4} \d{2}')->match($string)->first(function (Match $match) 
{
    $year = $match->group(1);
    $month = $match->group(2);
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X