Bonjour
Je butte sur la regex pour convertir un pattern de date en pattern SQL
Les pattern d'entrée sont au format
dd-MM-yyyy
MM/dd/yyyy
...
Le pattern de sortie SQL est
%d%M%y
%M%d%y
.....
Peut ton faire cela avec une regex
Merci
Version imprimable
Bonjour
Je butte sur la regex pour convertir un pattern de date en pattern SQL
Les pattern d'entrée sont au format
dd-MM-yyyy
MM/dd/yyyy
...
Le pattern de sortie SQL est
%d%M%y
%M%d%y
.....
Peut ton faire cela avec une regex
Merci
Salut,
Pourquoi vouloir faire ceci avec une Regex quand tu as des fonctions natives qui s'en charge ?
La fonction date()
La fonction date_format (PHP 5.2)
La fonction create_date_from_format() (PHP 5.3 mais tu trouvera des équivalents PHP5.2 dans la doc)
Bonjour,
Sinon, pour apprendre:
de dd-MM-yyyy à %d%M%y
Code:
1
2 $dateApres = preg_replace('/^(.{2})-(.{2})-(.{4})$/','$1%$2%$3', $dateAvant);
Les regex peuvent être très onéreuses au niveau perf, aussi faut-il être les plus restrictif possible sur les motifs.
Ainsi, le caractère "." ne doit être utilisé qu'en dernier recours. Dans ton exemple, le poin devra être remplacé par le métacaractère \d car il s'agit obligatoirement de nombre :
Code:
1
2 $dateApres = preg_replace('/^(\d\d)-(\d\d)-(\d{4})$/','%$1%$2%$3', $dateAvant);
Oui, merci,
J'en suis qu'à la première partie du cours sur les regex et alors vivement la deuxième :D
Duu coup, je vais déjà changer mes anciens codes (pour y regarder de plus près cette amélioration)
:ccool:
Bonsoir
A RideKick: non je connais les fonctions de PHP mais je ne cherche pas à exploiter les dates de la base de données mais à construire un texte d'une requête SQL. La sortie est donc du texte %d%M%y
Il faut donc que la requête élimine les lettres en double, enleve le caractère séparateur (qui peut être n'importe quelle caractère) et ajoute le signe % devant chaque
A Fench
Ta requete ne renvoi pas le bon format elle retourne %dd%MM%yyyy alors qu'il me faut %d%M%y
a snafuCode:$dateApres = preg_replace('/^(.{2})-(.{2})-(.{4})$/','%$1%$2%$3', $dateAvant);
Comme dit plus haut, je ne cherche pas à travailler sur les dates mais sur le patternCode:$dateApres = preg_replace('/^(\d\d)-(\d\d)-(\d{4})$/','%$1%$2%$3', $dateAvant);
Merci à tous
Je suis arrivé à un résultat mais en deux requêtes et c'est surement optimisable
Code:
1
2
3 $datePattern = preg_replace('<(.)\\1+(?!\\1)>', '$1', $patternInput); $sqlPattern = preg_replace('/^(.{1}).(.{1}).(.{1})$/','%$1 %$2 %$3', $datePattern );
.{1} ou juste . c'est la même chose.