За последние 24 часа нас посетили 57398 программистов и 1809 роботов. Сейчас ищут 1062 программиста ...

Поиск подстроки

Тема в разделе "PHP для новичков", создана пользователем Tarasyan, 9 дек 2016.

  1. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Нужно делать поиск подстроки регистронезависимый.
    PHP:
    1. $findme    = 'игр';
    2. $mystring1 = 'Играем на улице';
    3. $mystring2 = 'играем на улице';
    4.  
    5. $pos1 = stripos($mystring1, $findme);
    6. $pos2 = stripos($mystring2, $findme);
    7.  
    8. if ($pos1 === false) {
    9.     echo "Строка '$findme' не найдена в строке '$mystring1'";
    10. }
    11. echo "<br>";
    12. if ($pos2 !== false) {
    13.     echo "Нашел '$findme' в '$mystring2' в позиции $pos2";
    14. }


    Почему он не находит в слове "Играем" заданный "игр"?
     
  2. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    mb_stripos()
     
    Deonis нравится это.
  3. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    https://php.ru/manual/function.mb-stripos.html

    mb_stripos
    (PHP 5 >= 5.2.0, PHP 7)

    Это работает включительно до 5.2.0?
    А если выше? К примеру PHP Version 5.4.31
    --- Добавлено ---
    Кстате в латинице и мой первый вариант срабатывает.
    mb_stripos() так же не дает результата в кирилице.
     
  4. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Нашел решение. Пришлось перевести все в нижний регистр и искать.

    mb_strtolower($mystring1, 'UTF-8') - решает проблему
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    >= - больше или равно.
    Вам показали решение, только вы что-то не докрутили его:
    PHP:
    1. if(($pos = mb_stripos($mystring1, $findme, 0, 'utf-8')) !== false) {
    2.    echo 'Вхождение найдено. Позиция ', $pos;
    3. }
    4. if(($pos = mb_stripos($mystring2, $findme, 0, 'utf-8')) !== false) {
    5.    echo 'Вхождение найдено. Позиция ', $pos;
    6. }
     
  6. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Епс... я упустил третий параметр "0"

    Делал
    PHP:
    1. $pos=mb_stripos($mystring1,$findme,'utf-8')
    , и оно ругалось.
    Хоча и без должно работать.
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Матом? И правильно делало. Потому, что вы документацию не внимательно читаете. Третий параметр - offset:
    --- Добавлено ---
    Не должно и не будет
     
    Tarasyan нравится это.
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    :D:D:D[​IMG]
     
    Tarasyan нравится это.
  9. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Ну у меня на анг ))) то не так оскорбительно =)