$this->setValidator('website', new sfValidatorAnd(array(
$this->validatorSchema['website'],
new sfValidatorUrl(array(), array(
'invalid' => 'This is not website',
)),
)));
此验证 http://google.com ,但 google.com 否。如果没有 http:// ?
,我该怎么编辑才能进行验证答案 0 :(得分:4)
我担心你需要创建自己的自定义验证器:
class myCustomValidatorUrl extends sfValidatorRegex
{
const REGEX_URL_FORMAT = '~^
((%s)://)? # protocol
(
([a-z0-9-]+\.)+[a-z]{2,6} # a domain name
| # or
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address
)
(:[0-9]+)? # a port (optional)
(/?|/\S+) # a /, nothing or a / with something
$~ix';
protected function configure($options = array(), $messages = array())
{
parent::configure($options, $messages);
$this->addOption('protocols', array('http', 'https', 'ftp', 'ftps'));
$this->setOption('pattern', new sfCallable(array($this, 'generateRegex')));
}
public function generateRegex()
{
return sprintf(self::REGEX_URL_FORMAT, implode('|', $this->getOption('protocols')));
}
}
此处((%s)://)?
表示现在的协议是可选的。
有关原始模式(REGEX_URL_FORMAT const),请参阅sfValidatorUrl。
答案 1 :(得分:1)
对于验证,您可以使用带有标志FILTER_VALIDATE_URL的本机PHP函数filter_var。
答案 2 :(得分:-1)
只需将“required”选项设置为false(默认情况下为true)。
$this->setValidator('url',
new sfValidatorUrl(array('required' => false), array(
'invalid' => 'invalid url')));