2

Zend\Validator\Hostname を使用して、URL を含む入力文字列を検証します。問題は、タイプ mydomain.com の URL のみを受け入れ、http:// または https:// プロトコル プレフィックスを使用しないことです。望ましい動作を達成するための最良の方法は何ですか?

$inputFilter->add($factory->createInput(array(
                'name'     => 'shop_link',
                'required' => false,
                'filters'  => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                ),
                'validators' => array(
                        array(
                            'name'    => 'StringLength',
                            'options' => array(
                                'encoding' => 'UTF-8',
                                'min'      => 1,
                                'max'      => 100,
                            ),
                        ),
                        array(
                            'name'    => 'Hostname',
                            'options' => array(
                                'allow'       => \Zend\Validator\Hostname::ALLOW_DNS, // Allow these hostnames
                                'useIdnCheck' => true,  // Check IDN domains
                                'useTldCheck' => true,  // Check TLD elements
                                'ipValidator' => null,  // IP validator to use
                            ),
                        ),
                ),
        )));

ありがとう

4

4 に答える 4

4

試してみるべきことが 2 つあります。最初の 1 つは、おそらくすでに目的の結果になっているでしょう。

'options' => array(
    'allow' => Hostname::ALLOW_URI | Hostname::ALLOW_DNS,
    ....
)

少なくともRFC仕様に従ってURIを許可するには、スキームの検証を含める必要があります...

それに加えて、知っておきたいフィルターもあります。Zend\Filter\UriNormalize

于 2013-08-19T05:44:54.990 に答える
3

私はUriバリデーターを使用し、URI を検証するためにallowRelative (false に設定) を無効にしました。

$this->add(array(
        'name' => 'url',
        'validators' => array(
            array(
                'name' => 'Uri',
                'options' => array(
                    'allowRelative' => false
                ),
            ),
        ),
    ));
于 2014-04-05T13:54:03.753 に答える
0

これを試して:

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;
}
于 2015-02-26T06:06:46.197 に答える