preg_replace pour mettre en majuscule une lettre après un devis
J'ai des noms comme ceci:
$str = 'JAMES "JIMMY" SMITH'
- Je exécuter strtolower
puis ucwords
qui renvoie à ceci:
$proper_str = 'James "jimmy" Smith'
Je tiens à tirer parti de la deuxième lettre de mots dont la première lettre est un guillemet double. Voici la regexp. Il semble strtoupper n'est pas de travailler l'expression renvoie simplement à l'identique de l'expression originale.
$proper_str = preg_replace('/"([a-z])/',strtoupper('$1'),$proper_str);
Des indices? Merci!!
source d'informationauteur Summer | 2010-04-14
Vous devez vous connecter pour publier un commentaire.
Utiliser le e modificateur avoir la substitution être évalués:
Où
$0
contenant la correspondance de l'ensemble du motif, de sorte"
et la lettre minuscule. Mais ce n'est pas grave puisque le"
ne change pas lors de l'envoyer par le biais destrtoupper
.Probablement la meilleure façon de le faire est d'utiliser
la fonction preg_replace_callback()
:Vous pouvez utiliser le
e
(eval) drapeau surpreg_replace()
mais je le déconseille. Particulièrement lorsqu'il s'agit de l'entrée externe, c'est potentiellement très dangereux.Utilisation
preg_replace_callback
- Mais vous n'avez pas besoin d'ajouter une fonction nommée, plutôt l'utilisation d'une fonction anonyme.Utilisation de
/e
est obsolète depuis PHP 5.5 et ne fonctionne pas en PHP 7Quelque chose comme cela pourrait faire l'affaire:
- Je le faire sans regex, dans le cadre de ma coutume
ucwords()
fonction. En supposant que pas plus de deux citations apparaissent dans la chaîne:Ce faire, vous devez :
Vous devriez pas l'utiliser "eval()" pour des raisons de sécurité.
De toute façon, le patern modificateur "e" est obsolète.
Voir : La Documentation PHP.
ucwords()
a un deuxième séparateur de paramètres, l'option séparateurs contient le séparateur de mots, de caractères. L'utilisation de l'espace ' et"
comme délimiteur là et "Jimmy" est correctement reconnu.