Удалить знак препинания с регулярным выражением? - PullRequest
1 голос
/ 20 января 2011

Я сделал эту функцию, чтобы ограничить длину строки в выводе,

/* limit the lenght of the string */
function limit_length($content, $limit)
{
    # strip all the html tags in the content
    $output = strip_tags($content);

    # count the length of the content
    $length = strlen($output); 

    # check if the length of the content is more than the limit
    if ($length > $limit)
    {
        # limit the length of the content in the output
        $output = substr($output,0,$limit);

        $last_space = strrpos($output, ' ');

        # add dots at the end of the output
        $output = substr($output, 0, $last_space).'...';
    }

    # return the result
    return $output;
}

это работает нормально, но я думаю, что это не идеально ... например, у меня есть этот текст в строке

Gender Equality; Radicalisation; Good Governance, Democracy and Human Rights; 

и вот как я использую функцию,

echo limit_length($item['pg_description'], 20);

потом возвращается,

Gender Equality;...

Как вы можете, с ;... это выглядит не очень хорошо, когда вы хотите сказать людям, что внутри контента / строки больше текста.

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

Возможно ли это? Как я могу написать выражение, чтобы улучшить свою функцию, чтобы она была «пуленепробиваемой»?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 января 2011
$str = preg_replace( "/\W+$/", "", $str );
1 голос
/ 20 января 2011

Для удаления чего-либо, кроме букв, непосредственно предшествующих трем периодам (при необходимости измените):

$foo = preg_replace("[a-zA-Z0-9]+\.{3}", "...", $foo);

...