关于php:如何检查字符串是否以指定的字符串开头?


How to check if a string starts with a specified string?

本问题已经有最佳答案,请猛点这里访问。

我正在检查字符串是否以http开头。这张支票怎么办?

1
2
$string1 = 'google.com';
$string2 = 'http://www.google.com';


Use the substr function to return a part of a string.

1
substr( $string_n, 0, 4 ) ==="http"

如果你想确定这不是另一个协议。我会使用http://,因为https也会匹配,以及其他东西,比如http-protocol.com。

1
substr( $string_n, 0, 7 ) ==="http://"

一般情况下:

1
substr($string, 0, strlen($query)) === $query


使用strpos()

1
2
3
if (strpos($string2, 'http') === 0) {
   // It starts with 'http'
}

记住这三个等号(===)。如果你只用两个,它就不能正常工作。这是因为如果在干草堆中找不到针,strpos()将返回false


还有适合这种情况的strncmp()函数和strncasecmp()函数:

1
if (strncmp($string_n,"http", 4) === 0)

一般来说:

1
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)

substr()方法相比,优势在于strncmp()只做需要做的事情,而不创建临时字符串。


您可以使用简单的regex(用户viriathus的更新版本,因为eregi已被弃用)

1
2
3
if (preg_match('#^http#', $url) === 1) {
    // Starts with http (case sensitive).
}

或者如果你想要不区分大小写的搜索

1
2
3
if (preg_match('#^http#i', $url) === 1) {
    // Starts with http (case insensitive).
}

正则表达式允许执行更复杂的任务

1
2
3
if (preg_match('#^https?://#i', $url) === 1) {
    // Starts with http:// or https:// (case insensitive).
}

从性能上讲,如果字符串不是以您想要的开头,您不需要创建新的字符串(与SUBSTR不同),也不需要解析整个字符串。尽管第一次使用regex(您需要创建/编译它)时会有性能损失。

This extension maintains a global per-thread cache of compiled regular
expressions (up to 4096).
http://www.php.net/manual/en/intro.pcre.php


您可以使用下面的小函数检查字符串是否以HTTP或HTTPS开头。

1
2
3
4
5
6
7
function has_prefix($string, $prefix) {
   return substr($string, 0, strlen($prefix)) == $prefix;
}

$url   = 'http://www.google.com';
echo 'the url ' . (has_prefix($url, 'http://')  ? 'does' : 'does not') . ' start with http://';
echo 'the url ' . (has_prefix($url, 'https://') ? 'does' : 'does not') . ' start with https://';


还工作:

1
2
3
if (eregi("^http:", $url)) {
 echo"OK";
}