Задача сделать сравнение двух строк на совпадение словосочетания Данные $el2 = "Пользовались один раз"; $elem_pq['description'] = "Пользовались один раз," тут в тексте стоит в конце запятая Я использую Код (Text): if (mb_strpos($elem_pq['description'],$el2)== false) Но эта функция не учитывает, когда в тексте есть запятые, точки и другие знаки. И такой текст она не находит. Как мне сделать чтобы эти все знаки не учитывались. Спасибо
Не для чата что-то вроде антимат системы делаешь случаем? PHP: function compareStrings(string $str1, string $str2): bool { // Очищаем строки от спец. символов, оставляем только печатные буквы и цифры $str1 = preg_replace("/[^A-Za-z0-9 ]/ui", '', $str1); $str2 = preg_replace("/[^A-Za-z0-9 ]/ui", '', $str2); // Сравниваем обе строки без учета регистра return strcasecmp($str1, $str2) === 0; } //- Строка 1 $text = 'пРивЕт,'; //- Строка 2 $text2 = 'ПРИВЕТ'; if ( !compareStrings($text, $text2) ) { print 'Не совпало'; } else { print 'Совпало'; } p.s. Это строгое сравнение, если нужно что-то более сложное, когда у тебя два одинаковых предложения, но написаны в обратном порядке, а ты хочешь найти конкретное слово, придется работать с массивом, т.е. разбивать строки.
я не знаю в чем проблема я сменил на функцию mb_strpos и все работает. strcasecmp не хочет работать но mb_strpos мне не подходит она не делает точное сравнение слово сочетаний
Всем спасибо но проблема была просто в регистре. Поэтому у меня не искалось. Регулярка не нужна mb_stripos справляется со спец символами и регистром --- Добавлено --- Код (Text): if (mb_stripos($elem_pq['description'],$el2,0, 'UTF-8')!==false)
Настрой правильно сервер, базу, чтобы не использовать в будущем конверторы всякие и не "хапать ошибки". Ещё можно в нижний регистр привести "mb_strtolower"
почему то strcasecmp регистр не учитывает. Может кто что знает подскажите почему. Ведь должна. Пока пришлось применить так mb_internal_encoding('utf-8'); strcasecmp(mb_strtolower($elem_pq['description']),$el2) == 0)
compareStrings - работает не корректно, регулярки неправильные. PHP: $var1 = "Проверка"; $var2 = "проверка"; $str1 = iconv('utf-8', 'ascii//TRANSLIT', $var1); $str2 = iconv('utf-8', 'ascii//TRANSLIT', $var2); if (strcasecmp($str1, $str2) == 0) { echo '$var1 равно $var2 при сравнении без учёта регистра'; }