我需要一个表单内的 URL 验证器。现在我正在使用:
$url = new Zend_Form_Element_Text('url');
$url->addValidator(new Zend_Validate_Hostname());
上面的代码将验证 URL 的 like:www.domain.com
但将无法验证http://www.domain.com
.
我应该使用什么验证器来验证有和没有协议 URL 的情况。
我需要一个表单内的 URL 验证器。现在我正在使用:
$url = new Zend_Form_Element_Text('url');
$url->addValidator(new Zend_Validate_Hostname());
上面的代码将验证 URL 的 like:www.domain.com
但将无法验证http://www.domain.com
.
我应该使用什么验证器来验证有和没有协议 URL 的情况。
这将验证域和 uri:
$form->addElement ('text', 'url',array( '验证器' => 数组 ( 大批( '打回来', 真的, ['回调' => 函数($值){ if (Zend_Uri::check($value)) { $hostnameValidator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS); //不允许本地主机名,这是默认的 $uriHttp = Zend_Uri_Http::fromString($value); 返回 $hostnameValidator->isValid($uriHttp->getHost()); } 返回假; }], 'messages' => [Zend_Validate_Callback::INVALID_VALUE => '请输入一个有效的 URL'] ) ) ));
您需要删除方案 http,或实施新的可重用验证器 http://www.rondobley.com/2011/09/24/how-to-validate-a-url-with-a-scheme-and- Zend 框架中的主机名/
你不能用 Zend_Validate_Hostname 来做。你可以这样做,是编写你自己的验证器,它将sting分成两部分 - 并使用 Zend_Validate_Hostname 作为主机名和 Zend_Validate_InArray 作为协议来验证它们