我尝试使用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;
}
}
提前致谢! 尼克
答案 0 :(得分:5)
我建议使用验证程序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";
}
}
答案 1 :(得分:4)
截至目前,您的验证程序将失败,因为http://google.com不是有效的主机名。但是,google.com有效。
你应该拥有什么: $ hostname ='google.com';
答案 2 :(得分:1)
试一试:
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;
}