Распознавать символьные домены юникода в тексте - PullRequest
0 голосов
/ 12 июня 2019

У меня есть следующее регулярное выражение

(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\.[a-zA-Z]{2,11}?$

, который распознает домены типа moo.foo , но не распознает такие случаи, как:

  • festelån.net с некоторыми символами Unicode
  • http://hellöthere.com/ или случаи, когда присутствуют протокол http или https вместе с косой чертой .

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

1 Ответ

0 голосов
/ 12 июня 2019

Вот функция, которая есть в моем проекте OpenSource и которая может вам помочь.Я использовал функцию PHP filtar_var для проверки.

public function ValidateHost($Host)
    {
        if(isset($Host))
        {
            if(!is_null($Host) && !empty($Host))
            {
                if(strstr($Host, ".") && strlen($Host) > 3 && strlen($Host) < 255 && (!strstr($Host, "..")) && (!strstr($Host, " "))
                   && preg_match('/[a-zA-Z]+/', $Host) && (!strstr($Host, "@")) &&
                   !(preg_match('/([^.]*[.][0-9]*$)/', $Host)) && filter_var(FILTER_VALIDATE_URL) == true)
                    return Config::RET_OK;
                else return Config::INVALID_HOST_NAME;
            }
            else return Config::INVALID_NULL;
        }
        else return Config::INVALID_NULL;
    }

Если вы хотите проверить, вот мой проект: InfraTools

...