Frage

Ich möchte wissen, ist es eine Möglichkeit, Text wie folgt aufgeteilt:

123456789 in 123-456-789

als hinzufügen "-" nach jeweils drei Zeichen

?

Ich wollte nur wissen, wie ich das Gegenteil wissen, aber wie diese über den Kopf zu tun ist. ;)

und auch wenn der Text

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

languge : PHP only
War es hilfreich?

Lösung

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

finden Sie unter http://php.net/wordwrap

Andere Tipps

Ich bin kein großer Fan von regulären Ausdrücken für einfache String-Extraktion (besonders feste Länge Extraktionen), so dass sie für etwas komplexere Sachen bevorzugen. Fast jede Sprache hat eine Teilfunktion so, Ihre Eingabe vorausgesetzt bereits validiert worden, ein einfacher (Pseudo-Code, da Sie keine Sprache angegeben haben):

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

Wenn Sie wollen, dass es alle drei Zeichen für eine Zeichenkette variabler Länge (mit ungerader Größe am Ende):

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

Für jede Sprache:

  • Erstellen Sie eine leere Zeichenfolge Variable mit dem Namen "Ergebnis"
  • Einen Ganzzahl-Zähler-Variable "i", die bis zur Länge der Original string (der mit der Zahl)
  • inkrementiert
  • Fügen Sie jedes Zeichen von der ursprünglichen Zeichenfolge „Ergebnis“
  • Wenn i Modulo 3 (in der Regel% oder mod) null ist, fügen Sie einen Strich auf "Ergebnis"

Im Interesse der Vollständigkeit, hier ist eine Python-Lösung:

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

Da Sie Ihre Frage aktualisiert, um eine PHP-Lösung zu geben, dies sollte funktionieren:

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

Siehe substr für weitere Informationen über diese Funktion. Dies wird für die Ziffern nicht nur funktionieren, sondern auch für alphabetische Zeichen zu.

Noch eine andere Python-Version:

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

Ich denke, dass dies sanely in einer Regex mit Look-Ahead getan werden:

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

Da Sie erwähnen PHP in einem Kommentar:

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

Bearbeiten : Nach VolkerK wordwrap zeigte, fand ich chunk-split in der Dokumentation:

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

Dies hat den Vorteil, dass es funktioniert auch, wenn es Leerzeichen in der Zeichenfolge (wordwrap würde es vorziehen, in den Räumen zu brechen).

In Perl:

#!/usr/bin/perl

use strict;
use warnings;

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

print "$1-$2-$3"

Sie können es mit (unter anderen Mitteln) einen regulären Ausdruck und ersetzen. Die genaue Syntax hängt von dem Werkzeug oder Programmiersprache Sie verwenden. Zum Beispiel wäre eine Möglichkeit, es in Perl zu tun

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

Zeile 2 ersetzt alle 3 Ziffern für die gleichen drei Ziffern und einem Bindestrich. Mit chop () können wir den Hinter Strich löschen.

Es ist eine andere Frage hier. Was tun, wenn die Zeichenfolge nicht ein Vielfaches von 3 Menge von Ziffern enthält? Wenn eine solche Strings erlaubt wurden, dann ist die obige Snippet würde eine Modifikation benötigen.

Auch in Abhängigkeit von den Besonderheiten des Falles, können Sie mit einfacher Teilzeichenfolge Ersatz oder String-Slicing weg.

Ein weiteres Perl Beispiel. Dies entfernt nicht endgültig Gruppen, die kleiner als drei, und es läßt Anfang Gruppen von weniger als drei Ziffern allein. Es basiert (ziemlich schamlos) auf die "Geld-Nummern" Beispiel in Learning Perl (Seite 212 des 5. ed):

#!/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";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top