2014-09-22 4 views
0

Я использую PHP, имеющий следующую строку:Smart Word Wrap?

$message = 'hello, DavidPalmerUgroImmIErogandTagroChechiken ho are you?'; 

Я хочу разделить word если струны любое слово длиной затем 15 characters. Как я могу это сделать?

Я искал и нашел ответы на разделение цепочки WHOLE, но не просто разделил WORD, если это конкретное слово имеет длину более 15 символов. Пожалуйста помоги!

+0

как вы хотите разбить? добавить промежутки между ними или добавить подгибы? –

+0

Просто хотите использовать ПРОСТРАНСТВО между двумя двумя словами SPLITTED (после разделения слова LONG) – user2854563

ответ

3

вы можете попробовать что-то подобное.

$newMessage = preg_replace('/(\S{15})(?=\S)/', '$1 ', $message); 
+1

Вы regex Geek: P Это отличный вариант. Спасибо Sharma – user2854563

+1

Я рад, что это работает для вас :) –

3

Это относительно базовое решение, и есть вещи, которые вы можете улучшить (лучшее распознавание слов, ввод 14-букв, затем дефис для прерванных слов и т. Д.), Но это должно дать вам хорошую отправную точку.

Вы также можете сделать это с помощью регулярных выражений (/[^\s]{15,}/ в качестве основной отправной точки), если вы комфортно с этим - только лошадей для курсов :-)


Сплита строки на слова:

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here 

итерация слова, чтобы увидеть если таковые> 15 букв

foreach ($words AS $key => $word) { 
    if (strlen($word) > 15) { 
     // ... 
    } 
} 

затем, когда вы его найдете, разрежьте на мелкие детали

$words[$key] = implode(' ', str_split($word, 15)); 

и, наконец, присоединитесь ко всему этому.

$words = implode(' ', $words); 

Полный код:

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here 

foreach ($words AS $key => $word) { 
    if (strlen($word) > 15) { 
     $words[$key] = implode(' ', str_split($word, 15)); 
    } 
} 

$words = implode(' ', $words); 
+0

будет ли это работать, если строка имеет три последовательных пробела? 'hello worldasdfasdfasdfasdf werwerwerwer' –

+4

Да, запись массива будет пустой строкой (' '' '), не сработает'> 15', поэтому просто вернется в вывод как 3 пробела – Joe

+0

Кроме того, строки никогда не должны иметь несколько последовательных пробелов, если это обычный текст. –

0

Просто получить размер вашего слова с

$length = strlen($yourword); 

затем, если тот больше, чем 15, вы можете использовать chunksplit, чтобы отделить его в меньшие куски.

+0

Проблема в том, как я могу найти СЛОВО, если его более 15 символов? – user2854563