J'essaie d'écrire une fonction pour nettoyer la saisie de l'utilisateur.
Je n'essaie pas de le rendre parfait. Je préférerais avoir quelques noms et acronymes en minuscule qu'un paragraphe complet en majuscule. P>
Je pense que la fonction devrait utiliser des expressions régulières, mais je suis plutôt mauvais avec ceux qui ont besoin d'aide. P >
Si les expressions suivantes sont suivies d'une lettre, je veux faire de cette lettre majuscule. p> encore meilleur, la fonction pourrait ajouter un espace après "". , "!" et "?" Si ceux-ci sont suivis d'une lettre. P> Comment cela peut être atteint? p> p>
7 Réponses :
chaîne séparée en tableaux en utilisant ./!/? code> comme délimiteur. Boucle à travers chaque chaîne et utilisez
ucfirst (strtoolower ($ actuelle string)) code>, puis rejoignez-les à une seule chaîne. P>
Prise intéressante. Je vais essayer. J'espérais pratiquer ma regex un peu mais cela pourrait faire le travail. Merci.
Voici le code qui fait comme vous le souhaitez: sortie: strong> coller votre code! Au dessous de. CodePad va l'exécuter. Êtes-vous sûr? OK CODE> P> P>
Vous n'avez plus besoin de créer_function :) (
$output = preg_replace('/([\.!\?]\s?\w)/e', "strtoupper('$1')", $input)
Preg_replace (): Le modificateur / e / e n'est plus pris en charge, utilisez Preg_replace_callback à la place.
Ceci:
<? $text = "abc. def! ghi? jkl.\n"; print $text; $text = preg_replace("/([.!?]\s*\w)/e", "strtoupper('$1')", $text); print $text; ?> Output: abc. def! ghi? jkl. abc. Def! Ghi? Jkl.
$output = preg_replace_callback('/([.!?])\s*(\w)/', function ($matches) { return strtoupper($matches[1] . ' ' . $matches[2]); }, ucfirst(strtolower($input)));
@ W35L3Y Votre code m'intéresse ... Mais comment faire si ma chaîne est avec des tags comme celle-ci, par exemple: Bonjour. span> Cela ne fonctionne pas! CODE> ...? Pouvez-vous améliorer votre code s'il vous plaît pour ce genre de cas? En fait, comment échapper à
@Zagloo, dans le cas ci-dessus, il est nécessaire d'avoir seulement 1 espace de manière indépendante du nombre actuel d'espaces. Dans votre cas, il est soumis à une nouvelle question. Envisagez de demander à un nouveau et laissez-moi savoir. En bref, je n'ai pas de bonnes nouvelles pour vous car un span code> sans aucun attribut n'est facile, mais qu'en est-il des nœuds nichés avec divers attributs chacun?
@ W35L3Y THX pour votre retour! J'ai fait un nouveau post hier et quelqu'un a trouvé la solution ici: Stackoverflow.com/Questtions/29366592/... ; O)
Bonjour. Je ne comprends pas la partie [.!?] Code> de l'expression régulière. Le point non évalué ne devrait-il pas correspondre à un caractère (y compris «!» Et «?»)? Je pense que cela devrait être échappé mais cette réponse a été ici beaucoup de temps ...
@Nedark, dans un [] code> bloque n'importe quel caractère sauf
- ^ \] code> est un littéral.
Et ça? Sans regex.
$letters = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); foreach ($letters as $letter) { $string = str_replace('. ' . $letter, '. ' . ucwords($letter), $string); $string = str_replace('? ' . $letter, '? ' . ucwords($letter), $string); $string = str_replace('! ' . $letter, '! ' . ucwords($letter), $string); }
$Tasks=["monday"=>"maths","tuesday"=>"physics","wednesday"=>"chemistry"]; foreach($Tasks as $task=>$subject){ echo "<b>".ucwords($task)."</b> : ".ucwords($subject)."<br/>"; }
Offrant une entrée de l'échantillon réaliste et une sortie souhaitée sont des parties vitales de la création d'un exemple de reproductible minimal .