2010-07-30 3 views
1

мне нужно проверить переменную, чтобы увидеть, если строка начинается с HTTP: // или https: //находкой строка матч

, если он существует сделать что-то еще сделать другое. Как мне это сделать?

ответ

4
preg_match('!^https?://!', $string) 

docs

+0

ничего себе, что работал большой. Я не знал, что preg_match дает логическое значение, если оно истинно или ложно. У вас есть страница документа для регулярного выражения? Глядя на это сейчас, я думаю, что получаю это ...^начинается с ....? предыдущий символ может быть с ... не знаю, что! имею в виду. – Keith

+0

'preg_match()' не возвращает логическое значение. Он возвращает количество найденных совпадений; поскольку он останавливается после первого совпадения, он может просто вернуть 0 или 1. Если вы проверяете возвращаемое значение как в 'if (preg_match() == TRUE) {}', то вы не получите ожидаемого результата. – kiamlaluno

+0

Проголосовало за регулярное выражение. Хотя это технически правильно, это плохой совет. См. Ответ Гордонса для гораздо более быстрого решения. –

3

вопрос остается неясным. Если вы просто хотите знать, если строка начинается с либо HTTP или HTTPS, вы можете использовать

$startsWithIt = (strpos($haystack, 'http') === 0); 

Если вы хотите проверить, чтобы включить :// вы должны сделать:

if((strpos($haystack, 'http://') === 0) || 
    (strpos($haystack, 'https://') === 0)) { 
     echo 'Strings starts with http:// or https://';  
} 

Если вы нужно знать, какой из двух он, use Wrikken's answer.

+1

Разумный ответ. Я бы хотел, чтобы люди переставали использовать регулярное выражение для правильного сопоставления строк. –

+1

@Pixel: этот ответ не решает проблему. – SilentGhost

+0

Это проверяет, начинается ли строка с 'http' или' https', но нет, если она начинается с 'http: //' или 'https: //'. – Gumbo

6

Вы, наверное, ищете:

switch(parse_url($string, PHP_URL_SCHEME)){ 
    case 'https': 
     //do something 
    case 'http': 
     //something else 
    default: 
     //anything else you'd like to support? 
} 
+0

'$ urlScheme = parse_url ($ string, PHP_URL_SCHEME); switch ($ urlScheme) {'было бы еще более фантастическим, но это все еще отличный ответ. – erisco

1

Вот еще один:

function startsWithHttpOrHttps($haystack) 
{ 
    return substr_compare($haystack, 'http://', 0, 7) === 0 
     || substr_compare($haystack, 'https://', 0, 8) === 0; 
} 

На моей машине это опередили мой двойной strpos решение (даже с добавлением substr, чтобы предотвратить перебирая строка полной длины) и Regex.

0
$startsWithIt = (strpos($haystack, 'http') === 0); 

Если вы хотите проверить, чтобы включать: // вы должны сделать:

if((strpos($haystack, 'http://') === 0) || 
    (strpos($haystack, 'https://') === 0)) { 
    echo 'Strings starts with http:// or https://';  
} 
Смежные вопросы