Как проверить, начинается ли строка с указанной строкой?

Я пытаюсь проверить, начинается ли строка с http. Как я могу выполнить эту проверку?

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

Ответ 1

Используйте функцию substr для возврата части строки.

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

Если вы пытаетесь убедиться, что это не другой протокол. Вместо этого я бы использовал http://, так как https также соответствовал бы и другим вещам, таким как http-protocol.com.

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

И вообще:

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

Ответ 2

Используйте strpos():

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

Запомните три знака равенства (===). Это не будет работать должным образом, если вы используете только два. Это потому, что strpos() вернет false если иголка не найдена в стоге сена.

Ответ 3

Существует также функция strncmp() и strncasecmp(), которая идеально подходит для этой ситуации:

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

В общем:

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

Преимущество подхода substr() состоит в том, что strncmp() выполняет только то, что необходимо сделать, не создавая временную строку.

Ответ 4

Вы можете использовать простое регулярное выражение (обновленная версия от пользователя viriathus, поскольку eregi устарела)

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

или если вы хотите нечувствительный к регистру поиск

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

Режимы позволяют выполнять более сложные задачи

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

Эффективность, вам не нужно создавать новую строку (в отличие от substr) и не анализировать всю строку, если она не начинается с того, что вы хотите. У вас будет штраф за выполнение, хотя в первый раз вы используете регулярное выражение (вам нужно создать/скомпилировать его).

Это расширение поддерживает глобальный кеш для каждого потока скомпилированных регулярных выражений (до 4096). http://www.php.net/manual/en/intro.pcre.php

Ответ 5

Вы можете проверить, начинается ли ваша строка с http или https, используя небольшую функцию ниже.

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://';

Ответ 6

Также работайте:

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