Разделение текста в PHP

Я хочу знать, там любой способ разделить текст как это:

123456789 в 123-456-789

добавить "-" после каждых 3 символов?

Просто требуемый для знания, поскольку я знаю реверс, но как сделать, это находится вне моего понимания.;)

и также если текст

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

язык: PHP только

5
задан Cœur 11 December 2019 в 18:15
поделиться

9 ответов

<?php
$i = '123456789';
echo 'result: ', wordwrap($i, 3, '-', true);
печатает
result: 123-456-789

см. http: // php. net / wordwrap

4
ответ дан 13 December 2019 в 22:14
поделиться

Я не большой поклонник регулярных выражений для простого извлечения строк (особенно извлечения фиксированной длины), предпочитая их для более сложных вещей. Практически в каждом языке есть функция подстроки, поэтому, предполагая, что ваш ввод уже был проверен, простой (псевдокод, поскольку вы не указали язык):

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

Если вы хотите, чтобы каждые три символа для строки переменной длины (с нечетный размер в конце):

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
2
ответ дан 13 December 2019 в 22:14
поделиться

Для любого языка:

  • Создайте пустую строковую переменную с именем «result»
  • Создайте целочисленную переменную счетчика «i», которая увеличивается до длины original строка (та, что с номером)
  • Добавить каждый символ из исходной строки в «результат»
  • Если i по модулю 3 (обычно% или mod) равен нулю, добавить тире к «результату»
1
ответ дан 13 December 2019 в 22:14
поделиться

В интересах полноты, вот решение Python:

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

Поскольку вы обновили свой вопрос, указав решение PHP, это должно работать:

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

См. substr для получения дополнительной информации об этой функции. Это будет работать не только для цифр, но и для буквенных символов.

1
ответ дан 13 December 2019 в 22:14
поделиться

Еще одна версия Python:

>>> x="123456789"
>>> out=[x[i:i+3] for i in xrange(0, len(x), 3)]
>>> print "-".join(out)
123-456-789
1
ответ дан 13 December 2019 в 22:14
поделиться

Я думаю, что это можно разумно сделать в регулярном выражении с опережением:

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

Поскольку вы упомянули PHP в комментарии:

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

edit : После того, как VolkerK показал wordwrap , я обнаружил chunk-split в документации:

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

Это имеет то преимущество, что оно также работает, когда в строке есть пробелы (перенос слов предпочел бы разбивать на пробелы).

1
ответ дан 13 December 2019 в 22:14
поделиться

В Perl:

#!/usr/bin/perl

use strict;
use warnings;

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

print "$1-$2-$3"
0
ответ дан 13 December 2019 в 22:14
поделиться

Вы можете сделать это (среди прочего) с помощью совпадения и замены регулярного выражения. Точный синтаксис зависит от инструмента или языка программирования, который вы используете. Например, один из способов сделать это в Perl - это

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

Строка 2 заменяет каждые 3 цифры на те же 3 цифры и тире. С помощью chop () мы удаляем завершающее тире.

Здесь возникает еще один вопрос. Что делать, если нет струны? t содержать количество цифр, кратное 3? Если бы такие строки были разрешены, то приведенный выше фрагмент потребовал бы модификации.

Кроме того, в зависимости от специфики случая, вы можете обойтись простой заменой подстроки или разрезанием строки.

0
ответ дан 13 December 2019 в 22:14
поделиться

Еще один пример Perl. Это не удаляет конечные группы меньше трех и оставляет только начальные группы менее трех цифр. Он основан (довольно беззастенчиво) на примере «денежных чисел» из Learning Perl (стр. 212 5-го изд.):

#!/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";
0
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: