私はあなたがあなた自身のカスタムバリデータを作成する必要があります怖いです:
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を参照してください。
ユーザーに適切なURLを入力してもらうことをおすすめします。または、URLにプロトコルが含まれていない場合は、http://のプリプロセッサにJavaScriptを追加します。それから彼らはそれがそこに属していることを知っていました。 – ThiefMaster
ThiefMasterでは、データベースのURLプロトコルをハードコードしたくない場合があります。 – Acyra