редактирование текста, как WhatsApp в PHP - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь сделать текстовое сообщение в стиле WhatsApp.Когда пользователь создает текст, подобный этому:

*Hi* ~how are you~ _where are you?_

, тогда этот текст автоматически изменяется следующим образом

Привет Как вы , где вы

Я знаю, что могу сделать это с помощью php regex, например:

Пример для жирного текста:

function makeBoldText($orimessage){
    $message = $orimessage;
    $regex = "/\*([\w]*)\*/";
    $message = preg_replace($regex, '<strong>$0</strong>', $message);
    return  $message ;
}
echo makeBoldText($message);

Но есть проблема, которую следует удалить * когда текст выводится.

Другое регулярное выражение также должно выглядеть следующим образом:

Полужирный:

/\*([\w]*)\*/ 

Курсив:

/_([\w]*)_/ 

зачеркнутый:

 /~([\w]*)~/

Мой вопрос, могу ли я сделать все это в одном регулярном выражении?И можно ли удалять специальные символы при выполнении вывода?

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Я бы не знал, возможно ли сделать все это в одном регулярном выражении, но для вашего второго вопроса: "можно ли удалить специальные символы при выводе" , вы можете что-то сделатькак это:

$subject = "*Hi* ~how are you~ _where are you?_"
$message = preg_replace('/(?:\*)([^*]*)(?:\*)/', '<strong>$1</strong>', $subject);
$message = preg_replace('/(?:_)([^_]*)(?:_)/', '<i>$1</i>', $message);
$message = preg_replace('/(?:~)([^~]*)(?:~)/', '<strike>$1</strike>', $message);
0 голосов
/ 22 декабря 2018

Вы можете использовать один вызов preg_replace_callback здесь:

$styles = array ( '*' => 'strong', '_' => 'i', '~' => 'strike');

function makeBoldText($orimessage) {
   global $styles;
   return preg_replace_callback('/(?<!\w)([*~_])(.+?)\1(?!\w)/',
      function($m) use($styles) { 
         return '<'. $styles[$m[1]]. '>'. $m[2]. '</'. $styles[$m[1]]. '>';
      },
      $orimessage);
}

// call it as:
$s = '*Hi* ~how are you~ _where are you?_';
echo makeBoldText($s);
//=> <strong>Hi</strong> <strike>how are you</strike> <i>where are you?</i>
0 голосов
/ 22 декабря 2018

Вы можете сделать несколько preg_replace с помощью массива: выполнить несколько preg_replace с различным поиском и заменой каждый раз

$string = 'I have a match1 and a match3, and here\'s a match2';
$find = array('/match1/', '/match2/');
$replace = array('foo', 'bar');
$result = preg_replace($find, $replace, $string);

Вы можете использовать шаблон или str_replace после того, как удалить *

preg_replace: http://php.net/manual/en/function.preg-replace.php

str_replace: http://php.net/manual/en/function.str-replace.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...