yii\validators\EmailValidator::validateValue PHP Method

validateValue() protected method

protected validateValue ( $value )
    protected function validateValue($value)
    {
        if (!is_string($value)) {
            $valid = false;
        } elseif (!preg_match('/^(?P<name>(?:"?([^"]*)"?\\s)?)(?:\\s+)?(?:(?P<open><?)((?P<local>.+)@(?P<domain>[^>]+))(?P<close>>?))$/i', $value, $matches)) {
            $valid = false;
        } else {
            if ($this->enableIDN) {
                $matches['local'] = idn_to_ascii($matches['local']);
                $matches['domain'] = idn_to_ascii($matches['domain']);
                $value = $matches['name'] . $matches['open'] . $matches['local'] . '@' . $matches['domain'] . $matches['close'];
            }
            if (strlen($matches['local']) > 64) {
                // The maximum total length of a user name or other local-part is 64 octets. RFC 5322 section 4.5.3.1.1
                // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1
                $valid = false;
            } elseif (strlen($matches['local'] . '@' . $matches['domain']) > 254) {
                // There is a restriction in RFC 2821 on the length of an address in MAIL and RCPT commands
                // of 254 characters. Since addresses that do not fit in those fields are not normally useful, the
                // upper limit on address lengths should normally be considered to be 254.
                //
                // Dominic Sayers, RFC 3696 erratum 1690
                // http://www.rfc-editor.org/errata_search.php?eid=1690
                $valid = false;
            } else {
                $valid = preg_match($this->pattern, $value) || $this->allowName && preg_match($this->fullPattern, $value);
                if ($valid && $this->checkDNS) {
                    $valid = checkdnsrr($matches['domain'] . '.', 'MX') || checkdnsrr($matches['domain'] . '.', 'A');
                }
            }
        }
        return $valid ? null : [$this->message, []];
    }

Usage Example

 /**
  * Implementa le stesse funzionalità del metodo {@link validateValue}, ma restituisce
  * il motivo per cui la validazione è fallita:
  * <ul>
  * <li>{@link EmailValidator::ERROR_SYNTAX}: sintassi errata</li>
  * <li>{@link EmailValidator::ERROR_DOMAIN}: dominio inesistente (se il controllo è richiesto esplicitamente)</li>
  * <li>{@link EmailValidator::ERROR_NONE}: indirizzo valido</li>
  * </ul>
  * Se la mail da validare è null o stringa vuota la validazione viene considerata superata.
  * @param string $value Email da validare
  * @param boolean $checkDomain Se true richiede che venga verificata anche l'esistenza del dominio
  * @return string Errore di validazione (vedi costanti della classe)
  */
 public function validateValueWithResponse($value, $checkDomain = false)
 {
     if ($value == null || strlen(trim($value)) == 0) {
         return self::ERROR_NONE;
     }
     if (parent::validateValue($value) === null) {
         if ($checkDomain === true) {
             list($address, $host) = explode('@', $value);
             return checkdnsrr($host) ? self::ERROR_NONE : self::ERROR_DOMAIN;
         }
         return self::ERROR_NONE;
     }
     return self::ERROR_SYNTAX;
 }