if(strpos("http://www.example.com","http://www.")==0){ // do work}
Я бы ожидал, что это решится как истинное, что и происходит. Но что происходит, когда я делаю
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Это также передается на php 5, потому что, насколько я могу выработать, strpos возвращает false, которое переводится как 0.
Это правильное мышление / поведение? Если да, то каков обходной путь для тестирования на то, что подстрока находится в начале другой строки?
Да, это правильное / ожидаемое поведение:
strpos
может возвращать 0
когда есть совпадение в начале строки false
когда нет совпадения Дело в том, что вы не должны использовать ==
для сравнения 0
и false
; вы должны использовать ===
, например:
if(strpos("abcdefghijklmnop","http://www.") === 0) { }
Или :
if(strpos("abcdefghijklmnop","http://www.") === false) { }
Дополнительные сведения см. В разделе Операторы сравнения :
$a == $b
будет TRUE
если $a
равно $b
. $a === $b
будет TRUE
если $a
равно $b
, и они одного типа . И, цитируя страницу руководства strpos
:
Эта функция может возвращать Boolean
FALSE
, но может также возвращать небулевое значение, которое оценивается какFALSE
, например0
или""
.
Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации.
Используйте оператор===
для проверки возвращаемого значения этой функции.
===
и !==
сравнить тип и значение:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}
strpos возвращает int или boolean false. оператор == также оценивает значение 0 в значении false, вы хотите использовать оператор === (три знака равенства), который также проверяет, что сравниваемые типы одинаковы, а не просто видят, могут ли они быть оценены так, чтобы они были одинаковыми.
так
if (strpos($hastack, $needle) === 0) { // the $needle is found at position 0 in the $haystack }
0
– возможное возвращаемое значение из strpos
когда оно находит совпадение в самом начале. Если совпадение не найдено, оно возвращает false
(boolean). Поэтому вам нужно проверить возвращаемое значение strpos
с помощью оператора ===
который проверяет значение и тип, а не использует ==
который просто проверяет значение.
Я лично предпочитаю так:
if(!strpos($v,'ttp:'))$v='http://'.$v;
или
if(strpos(' '.$v,'http'))
чтобы избежать « 0
» позиции, тогда всегда делайте это числом более 0
ура