Domanda

Non sono molto bravo con le espressioni ... Ho guardato alcuni tutorial online, ma non sto ancora ottenerlo. Fondamentalmente, io sto cercando di tornare TRUE se una stringa viene formattata in questo modo:

4 cifre + spazio + 2 cifre e convertirlo in una data.

Quindi, la stringa sarà simile: 2010 02, e sto cercando di February, 2010 uscita.

Sto cercando di usare preg_match, ma continuo a ricevere

  

{non è un modificatore di ...

Modifica

Per i primi 2 risposte, l'ho cambiato, ma sto ottenendo un errore fatale al primo e lo stesso errore modificatore di sconosciuto al secondo:

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

Inoltre, appena provato la versione più approfondita nella prima risposta, e mentre l'errore va via, ma non cambia l'uscita ...

$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
}
È stato utile?

Soluzione

sto cercando di restituire TRUE se una stringa viene formattata in questo modo: 4 cifre + spazio + 2 cifre

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

Per convertire ad oggi si può provare qualcosa di simile:

$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
}

Altri suggerimenti

Prova questo ...

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

Senza avere alcun dettaglio per il codice vero e proprio, il seguente dovrebbe funzionare:

<?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...
}

?>
$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]));
}

È inoltre possibile utilizzare T-Regx biblioteca

$string = '2010 02';

pattern('\d{4} \d{2}')->match($string)->first(function (Match $match) 
{
    $year = $match->group(1);
    $month = $match->group(2);
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top