Question

Je veux savoir s'il y a un moyen de scinder le texte comme ceci:

123456789 au 123-456-789

à ajouter " - " après tous les 3 caractères?

Je voulais juste savoir, comme je sais le contraire, mais comment faire cela est au-dessus de ma tête. ;)

et aussi si le texte est

ABCDEFGHI OR A1B2C3D4E or any other format 
without any space between the characters !

languge : PHP only
Était-ce utile?

La solution

<?php
$i = '123456789';
echo 'result: ', wordwrap($i, 3, '-', true);
imprime
result: 123-456-789

voir http://php.net/wordwrap

Autres conseils

Je ne suis pas un grand fan des expressions rationnelles pour l'extraction de chaînes simples (en particulier les extractions de longueur fixe), préférant les choses légèrement plus complexes. Presque toutes les langues ont une fonction de sous-chaîne, donc, en supposant que votre entrée ait déjà été validée, un simple (pseudo-code puisque vous n'avez pas spécifié de langue):

s = substring (s,0,3) + "-" + substring (s,3,3) + "-" + substring (s,6,3)

Si vous le souhaitez tous les trois caractères pour une chaîne de longueur variable (avec une taille impaire à la fin):

t = ""
sep = ""
while s != "":
    if s.len <= 3:
        t = t + sep + s
        s = ""
    else:
        t = t + sep + substring (s,0,3)
        s = substring (s,3)
    sep = "-"
s = t

Pour n'importe quelle langue:

  • Créez une variable chaîne vide appelée "résultat"
  • Créer une variable de compteur entier, "i", qui s'incrémente jusqu'à la longueur de la chaîne originale (celle avec le nombre)
  • Ajouter chaque caractère de la chaîne d'origine à "résultat"
  • Si i modulo 3 (généralement% ou mod) vaut 0, ajoutez un tiret à "résultat"

Dans un souci de complétude, voici une solution Python:

>>> a = "123456789"
>>> a[0:3] + "-" + a[3:6] + "-" + a[6:9]
'123-456-789'

Depuis que vous avez mis à jour votre question afin de spécifier une solution PHP, cela devrait fonctionner:

substr($a, 0, 3) . "-" . substr($a, 3, 3) . "-" . substr($a, 6, 3)

Voir sous pour plus d'informations sur cette fonction. Cela fonctionnera non seulement pour les chiffres, mais aussi pour les caractères alphabétiques.

Encore une autre version de Python:

>>> x="123456789"
>>> out=[x[i:i+3] for i in xrange(0, len(x), 3)]
>>> print "-".join(out)
123-456-789

Je pense que cela peut être fait sainement dans une regex avec lookahead:

s/(.{3})(?=.)/$1-/g

Depuis que vous avez mentionné PHP dans un commentaire:

preg_replace ("/(.{3})(?=.)/", "$1-", $string);

edit : après que VolkerK ait affiché wordwrap , j'ai trouvé fractionnement de morceaux dans la documentation:

$new_string = chunk_split ($string, 3, '-');

Cela a l'avantage de fonctionner également lorsqu'il y a des espaces dans la chaîne (wordwrap préférerait se séparer des espaces).

En Perl:

#!/usr/bin/perl

use strict;
use warnings;

my $string = "123456789";
$string =~ /(\d{3})(\d{3})(\d+)/;

print "$1-$2-$3"

Vous pouvez le faire avec (entre autres moyens) une expression régulière correspondante et la remplacer. La syntaxe exacte dépend de l'outil ou du langage de programmation utilisé. Par exemple, une façon de le faire en Perl serait

$a = "123456789";
$a =~ s/(\d{3})/$1-/g;
chop($a);
print $a;

La ligne 2 remplace tous les 3 chiffres pour les mêmes 3 chiffres et un tiret. Avec chop (), nous supprimons le tiret final.

Il y a une autre question ici. Que faire lorsque la chaîne ne contient pas un nombre de chiffres multiple de 3? Si de telles chaînes étaient autorisées, l'extrait ci-dessus aurait besoin d'être modifié.

En outre, selon les cas, vous pouvez vous passer d'un simple remplacement de sous-chaîne ou du découpage en chaîne.

Un autre exemple Perl. Cela ne supprime pas les groupes finaux inférieurs à trois et laisse les groupes initiaux de moins de trois chiffres. Il est basé (assez sans vergogne) sur les "nombres d'argent". exemple dans Learning Perl (page 212 de la cinquième édition):

#!/usr/bin/env perl
use strict;
use warnings;

print "Gimme' a number: ";
chomp(my $number = <STDIN>);

1 while ($number =~ s/([0-9]{3})([0-9]+)/$1-$2/);

print "Now it's $number\n";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top