Iv видит некоторые ответы вроде: добавьте пробел после каждого 4-го символа, используя
echo wordwrap('1234567890' , 4 , '-' , true )
Но в этом случае мне нужно пересчитать символы справа налево.
Например, чтобы отформатировать номер телефона, удобный для пользователя 123-123-1234 . Проблема в том, что иногда пользователь может отправлять кодовую область, и если я начинаю нормально слева направо, я могу получить это: 012-312-3123-4 Итак, я думаю начать с права налево.
Есть идеи?
Регулярное выражение с запросом на просмотр, что есть одна или несколько групп из 4 символов между совпадающей позицией и концом строки, должны сделать это для вас.
echo preg_replace("/(?=(.{4})+$)/", "-", "1234567890"); // 12-3456-7890
Вам нужно будет обрабатывать строки с точным кратным 4 символам, которые в конце концов будут дефисом. Вы можете либо добавить утверждение lookbehind в регулярное выражение, либо, возможно, его будет легче читать, если впоследствии вы обрезаете дефис.
echo preg_replace("/(?=(.{4})+$)/", "-", "123456789012"); // -1234-5678-9012 echo preg_replace("/(?<=.)(?=(.{4})+$)/", "-", "123456789012"); // 1234-5678-9012 echo ltrim(preg_replace("/(?=(.{4})+$)/", "-", "123456789012"), "-"); // 1234-5678-9012
Это работает
function myFormat($s, $len, $delimiter = "-") { $techChar = " "; $newLen = ceil(strlen($s) / $len) * $len; $s = str_pad($s, $newLen, $techChar, STR_PAD_LEFT); $s = wordwrap($s, $len, $delimiter, true); $s = ltrim($s, $techChar); return $s; }