我在$str
变量中有一个字符串。
我如何验证是否以某个词开头?
示例
$str = "http://somesite.com/somefolder/somefile.php";
当我写下面的脚本时返回yes
if(strpos($str, "http://") == '0') echo "yes";
但即使我写了
,它也会返回是if(strpos($str, "other word here") == '0') echo "yes";
我认为strpos
如果找不到子字符串(或空值)则会返回zero
。
所以,我该怎么办,如果我想验证字符串开头的单词?(在这种情况下我可能必须使用===
吗?)
答案 0 :(得分:35)
你需要这样做:
if (strpos($str, "http://") === 0) echo "yes"
===
运算符是一种严格的比较,不会强制类型。如果您使用==
,那么false
,空字符串null
,0
,空数组和其他一些内容将是等效的。
请参阅Type Juggling。
答案 1 :(得分:15)
您应该查看identity operator(===),查看documentation。
您的测试成为:
if(strpos($str, "http://") === 0) echo "yes"; //returns yes
答案 2 :(得分:2)
答案 3 :(得分:2)
另一种选择是:
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/
答案 4 :(得分:2)
PHP确实有2个函数来验证字符串是否以给定的子字符串开头:
strncmp
(区分大小写); strncasecmp
(不区分大小写); 因此,如果您只想测试http(而不是https),可以使用:
if (strncasecmp($str,'http://',7) == 0) echo "we have a winner"
答案 5 :(得分:1)
str_starts_with
。if (str_starts_with($str, 'http://')) {
echo 'yes';
}
答案 6 :(得分:0)
if(substr($str, 0, 7)=="http://") {
echo("Statrs with http://");
}
答案 7 :(得分:0)
the documentation中有一个大红色警告:
此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
strpos
可能会返回0
或false
。 0
等于false
(0 == false
)。然而,它与相同为false,您可以使用0 === false
进行测试。所以正确的测试是if (strpos(...) === 0)
。
请务必阅读区别,重要的是:http://php.net/manual/en/language.operators.comparison.php
答案 8 :(得分:0)
strncmp($str, $word, strlen($word))===0
比strpos更有效率
答案 9 :(得分:0)
从PHP 8(2020-11-24)开始,您可以使用str_starts_with:
if (str_starts_with($str, 'http://')) {
echo 'yes';
}