Séparer avec des espaces

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Séparer avec des espaces

Re: Séparer avec des espaces

par AB » 06 févr. 2010, 21:18

À noter que j'ai proposé une solution plus compréhensible et la plus simple qui soit ...
Peut-être pas la plus simple, il faut déjà une bonne expérience pour y penser. Mais didactique c'est certain.

Pour faire plus simple (sans utiliser wordwrap) on pourrait faire ceci
$tab = array();
	
while($string != '')
{
$tab[] = substr($string,0,4);
$string = substr($string,4);	
}
	
$result = implode(' ',$tab);
L'avantage de cette solution (bien moins performante qu'une expression régulière ou qu'un wordwrap) est qu'elle est très facilement portable en utf-8 pour toute chaine de caractères y compris des caractères accentués :
	$tab = array();
	
	while($string != '')
	{
		$tab[] = mb_substr($string,0,4,'utf-8');
		$string = mb_substr($string,4,mb_strlen($string,'utf-8'),'utf-8');	
	}
	
	$result = implode(' ',$tab);
... mais il y a encore plus simple :
	$long = mb_strlen($string,'utf-8');
	
	$tab = array();
	
	for($i=0; $i < $long ; $i += 4)
	{
		$tab[] = mb_substr($string,$i,4,'utf-8');
	}
	
	$result = implode(' ',$tab);

A noter que pour faire toujours plus court on pourrait utiliser les fonctions des tableaux
$result = implode(' ',str_split($string, 4));
mais c'est sans intérêt réel par rapport à un wordwrap puisque str_split n'est pas non plus compatible utf-8;

C'est vrai que j'oublie souvent wordwrap car non compatible utf-8 mais il est vrai que dans le cas particulier de ce sujet puisqu'il ne s'agit que de chiffres, c'est encore le plus simple.

Re: Séparer avec des espaces

par stealth35 » 06 févr. 2010, 07:04

Salut,

une autre façon :
<?php
$chaine = '1234567890123456';
$chaine = wordwrap($chaine, 4, ' ', 1);

echo $chaine;
?>
sans doute la meilleur solution :wink:

Re: Séparer avec des espaces

par blof » 06 févr. 2010, 06:35

Salut,

une autre façon :
<?php
$chaine = '1234567890123456';
$chaine = wordwrap($chaine, 4, ' ', 1);

echo $chaine;
?>

Re: Séparer avec des espaces

par stealth35 » 05 févr. 2010, 22:18

$num = "1234567890123456";
marche tres bien sans les quotes chez moi, mais ta raison vos mieux les mettre, par contre je suis pas pour le coup de ton espace, parce que niveau portabilité c'est pas top (SQL, CLI...), et pour pasqu'une chiane soit coupé en HTML ca se gere avec le CSS

Re: Séparer avec des espaces

par niuxe » 05 févr. 2010, 21:38

stealth35, ton code ne retourne pas le résultat au complet
niuxe, merci ça fonctionne parfaitement
étrange...
Ton code fonctionne bien aussi. Car l'idée générale est bonne. Cependant, il y a une petite pétouille :
$num = "1234567890123456";
À noter que j'ai proposé une solution plus compréhensible et la plus simple qui soit (cf. mon commentaire en amont). J'ai pensé à une solution similaire à la tienne. :) Au passage, l'espace simple n'est peut être pas judicieux. N'oublie pas que l'espace insécable empêche un retour chariot sur une chaine.
Oui effectivement, c'est un cas d'école pour l'utilisation des expressions régulières, ie particulièrement adapté dans le contexte.
+1
Là, le code de stealth35 est plus rapide.

Tiger => pense à mettre le sujet résolu STP. :)

Bonne soirée

Re: Séparer avec des espaces

par stealth35 » 05 févr. 2010, 20:00

stealth35, ton code ne retourne pas le résultat au complet

niuxe, merci ça fonctionne parfaitement
étrange...

Re: Séparer avec des espaces

par Tiger » 05 févr. 2010, 19:31

stealth35, ton code ne retourne pas le résultat au complet

niuxe, merci ça fonctionne parfaitement

Re: Séparer avec des espaces

par AB » 05 févr. 2010, 19:29

Oui effectivement, c'est un cas d'école pour l'utilisation des expressions régulières, ie particulièrement adapté dans le contexte.

Re: Séparer avec des espaces

par stealth35 » 05 févr. 2010, 16:14

ou ca
	
$num = 1234567890123456;	
preg_match_all('/\d{4}/', $num, $matches);	
echo implode(' ', current($matches));

//1234 5678 9012 3456

Re: Séparer avec des espaces

par niuxe » 05 févr. 2010, 15:56

Hello,


Il y a d'autres solutions... En faisant simple, le petit modulo qui va bien :
$chaine = "1234567890123456";
$chaine_espace = "";
for($i = 0 ; $i <  strlen($chaine) ; $i++){
    $j = $i % 4;
    $chaine_espace .= $chaine[$i];
    if($j === 3){
        $chaine_espace .= "&nbsp;";
    }
}
echo $chaine_espace;
Bonne journée :)

Séparer avec des espaces

par Tiger » 05 févr. 2010, 15:08

Bonjour, je cherche et j'essaie des choses depuis hier, mais je n'arrive pas à grand chose. Ce que je souhaite faire, c'est de prendre un numéro de carte de crédit et de lui ajouter des espacements à tous les 4 chiffres afin que ce soit plus lisible.
Ex : mon numéro ressemble à ça : 1234567890123456 et je voudrais avoir comme résultat : 1234 5678 9012 3456
J'ai essayé différentes fonctions php, j'ai fait des recherches, mais je trouve toujours pas comment faire.
Merci pour votre aide