Ответ 1
Вы должны проверить с помощью оператора (===), см. документация.
У меня есть строка в переменной $str
.
как я могу проверить, начинается ли это с некоторого слова?
Пример
$str = "http://somesite.com/somefolder/somefile.php";
когда я написал следующий script
if(strpos($str, "http://") == '0') echo "yes"; //returns yes
НО он возвращает да, даже когда я писал
if(strpos($str, "other word here") == '0') echo "yes"; //returns yes too
Я думаю, что strpos
возвращает zero
, если он тоже не может найти подстроку (или пустое значение).
Итак, что я могу сделать, если я хочу проверить слово, которое в начале строки? (может быть, я должен использовать ===
в этом случае?)
Спасибо
Вы должны проверить с помощью оператора (===), см. документация.
Вам нужно сделать:
if (strpos($str, "http://") === 0) echo "yes"
Оператор ===
- это строгое сравнение, которое не вызывает ограничений типов. Если вы используете ==
, тогда false
, пустая строка, null
, 0
, пустой массив и несколько других вещей будут эквивалентны.
См. Тип Жонглирование.
проверить с помощью
if(strpos($str, "http://") === 0) echo "yes";
как ==
станет положительным как для ложных, так и для 0, проверьте документацию
Другой вариант:
if (preg_match("|^(https?:)?\/\/|i", $str)) {
echo "the url starts with http or https upper or lower case or just //.";
}
Как показано здесь: http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/
PHP имеет 2 функции, чтобы проверить, начинается ли строка с заданной подстрокой:
strncmp
(с учетом регистра);strncasecmp
(без учета регистра);Итак, если вы хотите протестировать только http (а не https), вы можете использовать:
if (strncasecmp($str,'http://',7) == 0) echo "we have a winner"
if(substr($str, 0, 7)=="http://") {
echo("Statrs with http://");
}
В большое количество предупреждений о:
Эта функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое оценивается как FALSE, например 0 или "". Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
strpos
может возвращать 0
или false
. 0
равно false
(0 == false
). Однако он не идентичен false, который вы можете проверить с помощью 0 === false
. Итак, правильный тест if (strpos(...) === 0)
.
Обязательно прочитайте разницу, важно: http://php.net/manual/en/language.operators.comparison.php
strncmp($str, $word, strlen($word))===0
Является немного более результативным, чем strpos