Ben kendi özel doğrulayıcı oluşturmanız gerekir korkuyorum:
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')));
}
}
İşte
((%s)://)?
artık protokol isteğe bağlıdır anlamına gelir. Özgün desen (REGEX_URL_FORMAT sabit) için sfValidatorUrl bakınız.
Neden doğru URL'leri girmek için kullanıcıları istemez? Ya da URL bir protokol içermiyorsa, http: // adresine biraz JavaScript ekleyin. Sonra oraya ait olduğunu bile biliyorlardı. – ThiefMaster
ThiefMaster, sen veritabanında url protokolünü hardcode istemiyorum kullanım durumları bol vardır. – Acyra