Поиск слова с экранированным апострофом в строке с помощью strpos

1

У меня есть слово с беглым апострофом в строке. Я пытаюсь использовать strpos, чтобы определить, находится ли слово с экранированным апострофом в строке или нет. К сожалению, каждый раз он повторяет ложь. Что я делаю не так? Я попытался в strpos с 1 сбежавшей косой чертой, 2 сбежавшей косой чертой, вплоть до 5, но каждый раз повторял ложь.

$text = "example\'s";
$text = " ".$text." ";

if (strpos($text, " example\\\\\ ")) {
echo "true.";
}

else {
echo "false.";
}
Теги:
escaping
strpos
apostrophe

1 ответ

3
Лучший ответ

Здесь есть две проблемы: первая заключается в том, что вы избегаете строки, а вторая - в вашей логике, основанной на возврате от функции strpos.

Первая проблема заключается в том, что вам не нужно избегать ввода поиска в strpos - это не функция регулярных выражений!

Вторая проблема заключается в том, что ваша (неэкранированная) строка поиска будет соответствовать нулевой позиции, которую PHP также интерпретирует как ложное значение.

В PHP strpos docs указано:

Предупреждение Эта функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое оценивается как FALSE. Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Вместо этого используйте этот код, который должен работать нормально:

$text = "example\'s";
$text = " ".$text." ";

if (strpos($text, " example\ ") === false) {
    echo "false.";
} else {
    echo "true.";
}

Оператор === является ключевым здесь - это означает равное значение и тип, поэтому он не позволяет интерпретатору PHP обрабатывать нулевой возврат равным false, что и в противном случае.

См. Ссылку операторов сравнения PHP: http://php.net/manual/en/language.operators.comparison.php

Изменить: Дополнительная информация о значениях, которые PHP считает ложными:

При преобразовании в boolean следующие значения считаются FALSE:

сама логическая ЛОЖЬ

целое число 0 (ноль)

поплавок 0.0 (ноль)

пустая строка и строка "0",

массив с нулевыми элементами

объект с нулевыми переменными-членами (только для PHP 4)

специальный тип NULL (включая неустановленные переменные)

Объекты SimpleXML, созданные из пустых тегов

Каждое другое значение считается TRUE (включая любой ресурс).

Предупреждение: -1 считается TRUE, как и любое другое ненулевое (отрицательное или положительное) число!

От: http://php.net/manual/en/language.types.boolean.php

  • 0
    Это все еще повторяет ложь.
  • 0
    Неважно. Вы редактируете лишние косые черты.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню