Validation ZF2 Http uri验证

Validation ZF2 Http uri验证,validation,uri,zend-framework2,Validation,Uri,Zend Framework2,我尝试用ZF2验证URI。问题是当我将$value设置为'http://google.com'或'google/com',它给我两个输出'bool(false)' 我的代码 use Zend\Uri\Http as ValidateUri; use Zend\Uri\Exception as UriException; class Domain { public function domain($value) { ret

我尝试用ZF2验证URI。问题是当我将$value设置为'http://google.com'或'google/com',它给我两个输出'bool(false)'

我的代码

use Zend\Uri\Http as ValidateUri;
use Zend\Uri\Exception as UriException;


    class Domain
    {
        public function domain($value)
        {
            return $this->validate($value);
        }

        public function validate($value)
        {   
            if (empty($value) || !is_string($value)) {
                return false;
            }

            try {
                $uriHttp = ValidateUri::validateHost($value);
                var_dump($uriHttp);
            } catch (UriException $e) {
                return false;
            }

            return true;
        }
    }
提前谢谢!
尼克

我建议使用验证程序Zend\validator\Hostname。文档中的示例:

$hostname  = 'http://google.com';
$validator = new Zend\Validator\Hostname(Zend\Validator\Hostname::ALLOW_DNS);

if ($validator->isValid($hostname)) {
    // hostname appears to be valid
   echo 'Hostname appears to be valid';
} else {
    // hostname is invalid; print the reasons
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

到目前为止,您的验证程序将失败,因为它不是有效的主机名。然而,google.com是有效的

你应该拥有: $hostname='google.com'

试试看:

public function isValidUrl($url) {
    $uri = new \Zend\Validator\Uri();
    if (!$uri->isValid($url)) {
        return FALSE;
    }
    $parseUrl = parse_url($url);
    if(!isset($parseUrl['host']) || empty($parseUrl['host'])) {
        return FALSE;
    }
    $validator = new \Zend\Validator\Hostname(\Zend\Validator\Hostname::ALLOW_DNS);
    if (!$validator->isValid($parseUrl['host'])) {
        return FALSE;
    }
    if (!filter_var($parseUrl['host'], FILTER_VALIDATE_URL) === false) {
        return FALSE;
    }
    return TRUE;
}
这里是so etc的解决方案将是有效的,但google.com将被设置为“无效”。因此,它必须是有效的可请求域。我的结果是:“输入似乎是DNS主机名,但无法与TLD'COM'的主机名架构匹配。输入似乎不是有效的本地网络名”。它是仅验证“DOMAIN.TLD”atm