Регулярное выражение PHP проверяет URL-адрес между домашней страницей или внутренней страницей

#php

#php

Вопрос:

Я хочу проверить несколько URL-адресов, чтобы проверить, является ли это домашней страницей / доменным именем или URL-адресом внутренней страницы / полного пути, но мой код проверяет только строку без http или https , пожалуйста, сообщите мне, что я делаю в ней неправильно.

PHP-код

     $urls = [
        "http://example.com",
        "https://www.example.net",
        "http://example.com/page.html?a=123",
        "http://example.com/page?a=123",
        "http://example.com/",
        "https://example.net/",
        "example.com",
        "demo.example.net"
    ];
foreach ( $urls as $url) {
    if ( preg_match('/^(?!-)(?:(?:[a-zA-Zd][a-zA-Zd-]{0,61})?[a-zA-Zd].){1,126}(?!d )[a-zA-Zd]{1,63}$/', $url)) {
        echo "$urls is domain";
    } else {
        echo "$url is full URL";
    }
}
 

Ожидаемые результаты

 http://example.com (domain)
https://www.example.net (domain)
http://example.com/page.html?a=123 (full URL)
http://example.com/page?a=123 (full URL)
http://example.com/ (domain)
https://example.net/ (domain)
example.com (domain)
demo.example.net (domain)
 

Комментарии:

1. Я бы, наверное, просто использовал php.net/manual/en/function.parse-url.php , и делаю свои выводы из того path , длиннее ли оно 1 символа и query является ли пустым…

2. Да, это будет вариант, но иногда пользователи не используют http или https, поэтому я хочу использовать регулярное выражение. у вас есть какое-либо решение для этого?