识别文本中的Unicode符号域

时间:2019-06-12 12:43:00

标签: php regex string search pcre

我有以下正则表达式

(?!:\/\/)([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 协议以及斜杠的情况。

如何修改它以识别那些情况? 我对regex不好,感谢您的帮助。
如果您想玩此示例,请online real time编辑该示例。

1 个答案:

答案 0 :(得分:0)

这是我在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