如何检查一个string是否以指定的string开头?
我试图检查一个string是否以http
开头。 我怎样才能做这个检查?
$string1 = 'google.com'; $string2 = 'http://www.google.com';
substr( $string_n, 0, 4 ) === "http"
如果你想确保它不是另一个协议。 我会使用http://
,因为https也会匹配,而其他的东西,如http-protocol.com。
substr( $string_n, 0, 7 ) === "http://"
一般来说:
substr($string, 0, strlen($query)) === $query
使用strpos()
:
if (0 === strpos($string2, 'http')) { // It starts with 'http' }
记住三个等号( ===
)。 如果只使用两个,它将无法正常工作。 这是因为如果在干草堆中找不到针, strpos()
将返回false
。
还有strncmp()
函数和strncasecmp()
函数,对于这种情况是非常完美的:
if (strncmp($string_n, "http", 4) === 0)
一般来说:
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)
与substr()
方法相比,优势在于strncmp()
只是做了需要做的事情,而不需要创build一个临时的string。
你可以使用一个简单的正则expression式(用户viriathus的更新版本,因为eregi
已被弃用)
if (preg_match('#^http#', $url) === 1) { // Starts with http (case sensitive). }
或者如果你想不区分大小写的search
if (preg_match('#^http#i', $url) === 1) { // Starts with http (case insensitive). }
正则expression式允许执行更复杂的任务
if (preg_match('#^https?://#i', $url) === 1) { // Starts with http:// or https:// (case insensitive). }
性能方面,你不需要创build一个新的string(与substr不同),也不需要分析整个string,如果它不是开始你想要的。 你第一次使用正则expression式会损害你的性能(你需要创build/编译它)。
这个扩展维护一个编译正则expression式的全局线程caching(最多4096个)。 http://www.php.net/manual/en/intro.pcre.php
您可以使用preg_match函数检查您的string是以http还是https开头,下面是一个示例。
$url = 'http://www.google.com'; $http = preg_match('/^http[^s]/i', $url); $https = preg_match('/^https/i', $url); echo 'the url ' . ($http ? 'does' : 'does not') . ' start with http'; echo 'the url ' . ($https ? 'does' : 'does not') . ' start with https';
也工作:
if (eregi("^http:", $url)) { echo "OK"; }