Я пытаюсь проверить, начинается ли строка с 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 (strpos($string2, 'http') === 0) {
// It starts with 'http'
}
Помните три знака равенства (===
). Он не будет работать должным образом, если вы используете только два. Это связано с тем, что strpos()
вернет false
, если игла не может быть найдена в стоге сена.
strpos
останавливается, если игла найдена или конец достигнут), если вам просто нужно посмотреть на определенную позицию.
Существует также функция strncmp()
и strncasecmp()
, которая идеально подходит для этой ситуации:
if (strncmp($string_n, "http", 4) === 0)
В общем:
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)
Преимущество подхода substr()
состоит в том, что strncmp()
выполняет только то, что необходимо сделать, не создавая временную строку.
Вы можете использовать простое регулярное выражение (обновленная версия от пользователя 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
Вы можете проверить, начинается ли ваша строка с http или https с помощью функции preg_match, ниже.
$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';
? true : false
избыточны и могут быть полностью удалены
Также работайте:
if (eregi("^http:", $url)) {
echo "OK";
}
startsWith
иendsWith
вstartsWith
сendsWith
startsWith
и безendsWith
регистра.starts_with
иends_with
.