2014-06-12 3 views
0

Je travaille avec une fonction de limaces et je ne comprends pas tout à fait certains d'entre eux et cherchait un peu d'aide à expliquer.preg_replace vs garniture PHP

Ma première question concerne cette ligne dans ma fonction slug $string = preg_replace('# +#', '-', $string); Maintenant je comprends que cela remplace tous les espaces par un '-'. Ce que je ne comprends pas est ce que le signe + est là pour qui vient après l'espace blanc entre le #.

Ce qui conduit à mon prochain problème. Je veux une fonction de compensation qui va se débarrasser des espaces, mais seulement les espaces après qu'ils entrent dans la valeur. Par exemple, quelqu'un a accidentellement entré "Arizona" avec deux espaces après le a et il a détruit les pages liées à l'Arizona. Donc, après toutes mes randonnées, je veux essentiellement comprendre comment je peux utiliser une garniture pour se débarrasser des espaces accidentels, mais toujours l'insertion preg_replace '-' entre les mots.

ex .. "Sun City West" = "soleil-ville-ouest"

Ceci est mon plein limace Fonction-

function getSlug($string){ 
if(isset($string) && $string <> ""){ 
    $string = strtolower($string); 
    //var_dump($string); echo "<br>"; 
    $string = preg_replace('#[^\w ]+#', '', $string); 
    //var_dump($string); echo "<br>"; 
    $string = preg_replace('# +#', '-', $string); 
} 
return $string; 

}

Répondre

2

Vous pouvez essayer ceci:

Il commence par découper les espaces supplémentaires au début et à lacaractère.

Voici votre expression rationnelle est

#\s+# 

qui est:

# = regex delimiter 
\s = any space character 
+ = match the previous character or group one or more times 
# = regex delimiter again 

donc le regex signifie ici: "correspond une séquence d'un ou plusieurs caractères blancs"

+0

Merci pour l'explication! – user3436399

+0

De rien :) Si ma réponse vous a aidé, n'hésitez pas à l'augmenter et/ou à l'accepter! –

2

Les + moyens au moins un des caractères précédents, de sorte qu'elle corresponde à un ou plusieurs espaces. Les signes # sont l'un des moyens de marquer le début et la fin du bloc de motif d'une expression régulière.

Pour une fonction TRIM, PHP fournit haut la main trim() qui supprime tous les espaces avant et après.

+0

Merci d'avoir tout expliqué! – user3436399