Preg_match pour une date
Je suis en train d'essayer de correspondre à une date en PHP à l'aide de preg_match, de scission et d'assigner des parties à un tableau, la date se présente comme "20100930", ici c'est le code que j'utilise:
//Make the tor_from date look nicer
$nice_from = $_POST['tor_from'];
$matches = array();
$ideal_from = '';
preg_match('/\d{4}\\d{2}\\d{2}\/', $nice_from, $matches, PREG_OFFSET_CAPTURE, 0);
//if (isset($matches[0])) $nice_from = $matches[0];
echo $matches[0];
echo "<br />";
echo $matches[1];
echo "<br />";
echo $matches[2];
echo "<br />";
echo $matches[3];
echo "<br />";
Ive été en utilisant:
http://php.net/manual/en/function.preg-match.php et PHP preg_match question à formuler des idées sur la façon de faire, mais je n'ai pas eu la chance de la faire fonctionner. Toute aide serait grandement appréciée.
OriginalL'auteur imbadatjquery | 2010-09-30
Vous devez vous connecter pour publier un commentaire.
Regex n'est pas la meilleure façon d'aller ici si le motif est présent simple. Utilisation
substr
à la place:Ni est-ce répondre à la question, ni vérifier si la date se compose de caractères numériques.
OriginalL'auteur lonesomeday
Bien que la regex n'est pas vraiment une bonne solution pour l'analyse d'une date au format AAAAMMJJ, nous allons marcher à travers pourquoi votre modèle n'est pas de travail.
Votre modèle
\d{4}\\d{2}\\d{2}\
dit: "match à 4 chiffres (\d{4}
), suivi par un caractère barre oblique inverse (\\
), suivie par la lettre d deux fois (d{2}
), suivie d'une barre oblique inverse (\\
) et puis enfin, un autre deux d (d{2}
)."Comme vous avez pu le comprendre maintenant, vous ne voulez pas le double slash!
Correspondra à 4 chiffres, suivi de 2 chiffres, puis un autre 2 chiffres.
En outre, vous ne spécifiez pas tout la capture de groupes, de sorte que votre sous-masques ne sera jamais rempli. Ce que vous avez probablement voulais dire:
Le voir en action à http://www.ideone.com/iAy7K. Notez qu'il n'est pas vraiment quelque raison dans votre cas à la spécification de la
PREG_OFFSET_CAPTURE
drapeau (qui renvoie la position de chaque match) ou0
pour l'offset.OriginalL'auteur Daniel Vandersluis
Oublier preg_match, utilisez la fonction strtotime():
Seulement affecter la sortie de la fonction strtotime à une variable, vous pouvez utiliser date('Y', $date) pour obtenir l'année, date('m', $date) pour obtenir mois, etc.
c'est beaucoup de traitement, il suffit de découper une chaîne en trois parties...
Si l'entrée est à partir d'une source de confiance et que vous êtes certain à 100% qu'il ne sera jamais s'écarter de la forme AAAAMMJJ, alors bien sûr, une correspondance de sous-chaîne est fine. Aussi, il me semble qu'à partir de l'exemple de code, le seul but de diviser la chaîne est juste de le remettre à nouveau ensemble dans un joli format. I. e., il semble que il n'y a pas besoin de le diviser, mais de "jolie".
OriginalL'auteur Alex Howansky
C'est mieux comme cela, à l'aide de preg_match et indexés noms.
Et les Matches se ressemblent:,
Acclamations.
OriginalL'auteur flaab
Vous avez besoin pour mettre de parenthèses autour de modèles que vous souhaitez afficher dans
$matches
. Aussi je ne pense pas que vous voulez que le double\\
entre vos\d
's parce que cela va s'échapper de la deuxième\
et de vous laisser correspondant à un littéral'd'
.OriginalL'auteur Kevin