Intereting Posts
Laravel – свойство не существует в экземпляре коллекции Понимание форм саморегуляции PHP обнаруживает Internet Explorer, который ниже версии 10 Как интегрировать несколько объектов в форму в Symfony 2 Каков наилучший способ передать HTML-код для встраивания через rss-канал в rss-парсер в php? Почему функция автозаполнения Internet Explorer отключена для всех html-форм на моем веб-сайте? PHP date () для JavaScript new Data () – Внутренний массив PDO_ODBC: имя источника данных не найдено и указанный драйвер по умолчанию не указан Laravel 5 на общем хостинге – неправильный public_path () PHP – вычесть даты в рабочие дни и часы работы Разбор текстового файла, содержащего данные изображения JSON, отправленный с Android для вычисления сервера двигателя, возвращает null Пара Regex Associative на новых строках Zend Framework 2 – Doctrine 2 – Использование тегов Documentor Хеширование файлов MD5 – соответствие вывода Delphi с помощью функции PHP md5_file

Санизировать предложение в php

Название может показаться странным, но я пытаюсь настроить этот preg_replace, который заботится о грязных писателях для текстового поля. Он должен:

  1. если есть восклицательный знак, не должно быть другого подряд.
  2. если есть., запятая выигрывает, и она должна быть,
  3. когда перед комой есть одно + пространство, оно должно быть уменьшено до нуля.
  4. предложение не может начинаться или заканчиваться запятой.
  5. не должно быть более двух одинаковых букв, соединенных вместе.
  6. пространство должно всегда присутствовать после запятой.

Например:

  • , Мой дом, зеленый., Приятно!
  • Мой дом …, который зеленый, хорош !!!
  • Мой дом, зеленый, хороший!

Конечный результат всегда должен быть:

Мой дом, зеленый, хорош!

Есть ли уже построенное регулярное выражение, которое позаботится об этом?

Решение проверить решение FakeRainBrigand ниже!

Возможно, мне придется использовать это для моих собственных сайтов … хорошая идея!

<?php $text = 'My hooouse..., which is greeeeeen , is nice!!! ,And pretty too...'; $pats = array( '/([.!?]\s{2}),/', # Abc. ,Def '/\.+(,)/', # ......, '/(!)!+/', # abc!!!!!!!! '/\s+(,)/', # abc , def '/([a-zA-Z])\1\1/', # greeeeeeen '/,(?!\s)/'); $fixed = preg_replace($pats, '$1', $text); echo $fixed; echo "\n\n"; ?> 

И «измененная» версия $ text: «Мой дом, зеленый, хорош! И довольно тоже».

UPDATE: вот версия, которая обрабатывает «abc, def» -> «abc, def».

 <?php $text = 'My hooouse..., which is greeeeeen ,is nice!!! ,And pretty too...'; $pats = array( '/([.!?]\s{2}),/', # Abc. ,Def '/\.+(,)/', # ......, '/(!)!+/', # abc!!!!!!!! '/\s+(,)/', # abc , def '/([a-zA-Z])\1\1/'); # greeeeeeen $fixed = preg_replace($pats, '$1', $text); $really_fixed = preg_replace('/,(?!\s)/', ', ', $fixed); echo $really_fixed; echo "\n\n"; ?> 

Я думаю, что это немного медленнее, поскольку это дополнительный вызов функции.

  - $result = preg_replace('/!+/', '!', $subject); - $result = preg_replace('/\.*,/', ',', $subject); - $result = preg_replace('/\s+(?=,)/', '', $subject); - $result = preg_replace('/^,*|,*$/', '', $subject); - $result = preg_replace('/([az])\1+/i', '$1$1', $subject); - $result = preg_replace('/,(?!\s)/', ', ', $subject); 

Один за другим, соответствующий вашим правилам 🙂