CAPS в названиях - это плохо
Кричать заглавными буквами - не хорошо. Но зачастую, менеджеры норовят добавить в названия большей заметности (на их взгляд) и лепят слова заглавными буквами. Google Покупки (Google Merchant Center) это чётко запрещает в своих фидах (https://support.google.com/merchants/answer/188494): "мы запрещаем добавлять в название рекламный текст (такой как "Бесплатная доставка") или использовать ЗАГЛАВНЫЕ БУКВЫ".
Вот пример, как в PHP проверить строку на наличие ЗАГЛАВНЫХ БУКВ:
Для кириллицы, нужно добавить модификатор юникода, чтобы получилось так: "/(\p{Lu}){2,}/u". Проверяем:
Ещё одна регулярка, которая также находит подряд идущие заглавные буквы: "/([[:upper:]]{2,})/u". Я посчитал среднее время работы скрипта с первой и второй регуляркой и вторая оказалась чуть быстрее. Так что пока не нашёл ещё более быстрый вариант, буду использовать "/([[:upper:]]{2,})/u" для поиска слов, написанных капсом.
Кстати, заглавные буквы вовсе не означают абсолютное зло, - может быть вполне нормальная аббревиатура. Так что после нахождения "проблемных" строк, нужно дальше думать, как с ними поступить.
Вот пример, как в PHP проверить строку на наличие ЗАГЛАВНЫХ БУКВ:
<?
$arStrings = [
'CAPS is bad',
'No caps at whole World Wide Web!',
'caps is bad!',
'No caps - No problems!',
'But with CAPS THERE ARE a LOT of problems!'
];
$pattern = '/(\p{Lu}){2,}/';
foreach ($arStrings as $string) {
if (preg_match($pattern, $string)) {
echo 'String "' . $string . '" with CAPS!' . '<br>';
} else {
echo 'String "' . $string . '" without CAPS!' . '<br>';
}
}
Скрипт сформирует такой вывод:
String "CAPS is bad" with CAPS!
String "No caps at whole World Wide Web!" without CAPS!
String "caps is bad!" without CAPS!
String "No caps - No problems!" without CAPS!
String "But with CAPS THERE ARE a LOT of problems!" with CAPS!
Т.е. паттерн "/(\p{Lu}){2,}/" позволяет найти две и более подряд идущие заглавные буквы, но только для латиницы.Для кириллицы, нужно добавить модификатор юникода, чтобы получилось так: "/(\p{Lu}){2,}/u". Проверяем:
<?
$arStrings = [
'CAPS is bad',
'No caps at whole World Wide Web!',
'caps is bad!',
'No caps - No problems!',
'But with CAPS THERE ARE a LOT of problems!',
'Такой КАПС тоже не пройдёт!',
'Бывают же адекватные заголовки',
'1.1 Первый; 1.2. Второй; 1.3. Третий',
'2.1. ПЕРВЫЙ; 2.2. ВТОРОЙ; 2.3. ТРЕТИЙ'
];
$pattern = '/(\p{Lu}){2,}/u';
foreach ($arStrings as $string) {
if (preg_match($pattern, $string)) {
echo 'String "' . $string . '" with CAPS!' . '<br>';
} else {
echo 'String "' . $string . '" without CAPS!' . '<br>';
}
}
Вывод:
String "CAPS is bad" with CAPS!
String "No caps at whole World Wide Web!" without CAPS!
String "caps is bad!" without CAPS!
String "No caps - No problems!" without CAPS!
String "But with CAPS THERE ARE a LOT of problems!" with CAPS!
String "Такой КАПС тоже не пройдёт!" with CAPS!
String "Бывают же адекватные заголовки" without CAPS!
String "1.1 Первый; 1.2. Второй; 1.3. Третий" without CAPS!
String "2.1. ПЕРВЫЙ; 2.2. ВТОРОЙ; 2.3. ТРЕТИЙ" with CAPS!
Это доступно в PHP с версии 5.1 (http://fi2.php.net/manual/ru/regexp.reference.unicode.php).Ещё одна регулярка, которая также находит подряд идущие заглавные буквы: "/([[:upper:]]{2,})/u". Я посчитал среднее время работы скрипта с первой и второй регуляркой и вторая оказалась чуть быстрее. Так что пока не нашёл ещё более быстрый вариант, буду использовать "/([[:upper:]]{2,})/u" для поиска слов, написанных капсом.
Кстати, заглавные буквы вовсе не означают абсолютное зло, - может быть вполне нормальная аббревиатура. Так что после нахождения "проблемных" строк, нужно дальше думать, как с ними поступить.
Комментарии
Отправить комментарий