Question
Salut là je besoin d'un peu d'aide.
Voici le code preg_match existant:
preg_match("/(\/)([0-9]+)(\/?)$/", $_SERVER["REQUEST_URI"], $m);
qui fait un bon travail de détection de la post_id
dans la chaîne URI suivante:
http://www.example.com/health-and-fitness-tips/999/
Je crois que cela devrait être suffisant arrière-plan.
Je change la 999
, le post_id
, à how-do-I-lose-10kg-in-12-weeks', the
post_title`, et la nécessité de modifier l'expression régulière de pre_match pour détecter la nouvelle chaîne.
Ma première pensée était juste ajouter [a-z] - à la fin de la regex faisant l'expression rationnelle suivante:
"/(\/)([0-9][a-z]/-+)(\/?)$/"
Il est peut-être simple? Dans le cas contraire, ce qui ne va pas avec ce qui précède?
La solution
Pas tout à fait: ([0-9][a-z]/-+)
est «un numéro, suivi d'une lettre, suivie d'au moins un tiret »
Vous voulez ([-0-9a-z]+)
.
Autres conseils
Je voudrais simplement utiliser \w
:
preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);
De Classes de caractères ou de jeux de caractères :
\w
signifie "caractère de mot", habituellement[A-Za-z0-9_]
. Notez la l'inclusion du trait de soulignement et chiffres.
\w
signifie mot, lettre peut être majuscules et minuscules de A à Z et a à z, nombre de 0 à 9 ou _. Il est équivalent à [A-Za-z0-9_]
. Vous pouvez tester dans le testeur en ligne ici.