<?php
$values = array(
'text???',
'???text',
'text???text',
'text ? ? ? ? ? text'
);
foreach ($values as $original_value) {
$value = preg_replace('/([?!.:,;]|\s)\1+/', '$1 ', $original_value);
echo $original_value . "\n" . $value . "\n\n";
}
text???
text?
???text
? text
text???text
text? text
text ? ? ? ? ? text
text ? text
Обрабатывать тексты в различных кодировках(требуется iconv).
Заменять кавычки на ёлочки.
Склеивать двойные кавычки.
Заменять знак дефиса или два знака дефиса подряд — на знак длинного тире.
Заменять знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире.
Заменять множество пробелов или табуляций на один пробел.
Заменять х в выражениях вроде 10x10 на знак умножения.
Исправлять неправильную расстановку запятых.
Разносить неправильно расставленные кавычки.
Вставлять неразрывный пробел после инициалов, сцеплять инициалы.
Делать неразрывными названия организаций и аббревиатуры форм собственности.
Делать неразрывными имя собственное и относящееся к нему сокращение.
Не разделять 2007 г., ставить пробел, если его нет.
Сцеплять скобки со словами.
Заменять 1/2 1/4 3/4 на спецсимволы.
Следить за тем, чтобы предлоги и союзы не находились в конце строки.
Следить за тем, чтобы частицы бы, ли, же и т.д. не отрывались от предшествующего слова.
Форматировать русские денежные суммы, расставляя пробелы в нужных местах.
Заменять от 3-х до 5-и точек подряд на троеточие.
Притягивать к слову запятые, отделять пробелом от последующего слова.
Притягивать к слову восклицательный знак.
Делать замену для +-.
Обрабатывать вложенные кавычки.
Притягивание чисел к знаку умножения.
Запятые до «а» и «но».
Притягивание «;» к предшествующему слову.
Убирает лишние знаки: «??» в «?», «!!!!» в «!!!».
Правильные апострофы в «LO'Лайт».
Прямая речь.
Неразрывные IP-адреса.
Почему Ajax не отправляет файлы?По тому, что файлы в форме не сериализуются. Для отправки файлов можно использовать FormData, можно поискать тут, уже готовые решения, так же можно воспользоваться поиском и найти ответ по первой попавшейся ссылке.
.class {
background:
url('/assets/images/offers/key.png') bottom 30px right 0 / 50% no-repeat,
url('/assets/images/offers/sell.png') bottom right no-repeat #F7F7F9;
}
.class {
background:
url('/assets/images/offers/key.png'),
url('/assets/images/offers/sell.png') #F7F7F9;
background-position: bottom 30px right 0, bottom right;
background-size: 50%, auto;
background-repeat: no-repeat;
}
bg-size
Смотри background-size. Это свойство должно быть указано после background-position, разделенного символом '/'.
MDN
.scroll_block::-webkit-scrollbar-thumb {
border: 2px solid white;
background-color: #ccc;
}
.scroll_block::-webkit-scrollbar {
-webkit-appearance: none;
}
.scroll_block::-webkit-scrollbar:horizontal {
height: 13px;
}
.scroll_block::-webkit-scrollbar-thumb {
border-radius: 6px;
border: 2px solid white;
background-color: rgba(0, 0, 0, .5);
}
Для чего, в данном случае, возвращать объекты?Твой вопрос говорит о том, что ты не понимаешь разницу между объектом и массивом.
Чем мне это поможет на конкретном примере?ОК. Пример. Давай допустим, что твой объект Product не просто содержит свойства, а каждое свойство..... да - тоже является объеком. Итак, перепишем конструктор, добавим несколько свойств новых, для примера:
public function __construct(int $id, string $name, int $price, $decription, $discount_date){
$this->id = $id;
$this->name = new EntityText($name);
$this->price = new Price($price);
$this->decription = new EntityText($decription);
$this->discount_date = new MyDate($discount_date); // MyDate extends \Datetime
}
<html>
<div id="product<?=$obj->getId()?>">
<h1><?=$obj->getName()->getTextValue()?></h1>
<p>Цена: <?=$obj->getPrice()->getUSD()->asText()?></p> <!-- например, выведет "101 доллар США" (c правильной формой слова "доллар/доллара/долларов") -->
<p><?=$obj->getDescription()->getTextValue(200)?></p>
<p>Скидка действут <?=$obj->getDiscountDate()->formatAsHuman()?></p> <!-- выведет "еще 2 дня" -->
</div>
</html>
var messages = $('.mess').attr('id'),
dialog = messages.split('-'),
id = idDialog[1];
красивее же!? :src="`/img/${imgName}.jpg`"
:src="'/img/' + imgName + '.jpg'"
computed: {
imgSrc() {
return `/img/${this.imgName}.jpg`;
},
},
:src="imgSrc"
methods: {
imgSrc: name => `/img/${name}.jpg`,
},
:src="imgSrc(imgName)"