Menu Adam R Brown

WP hooks navigation: Home/browseActions indexFilters index

Source View: is_email

To save our bandwidth, we show only a snippet of code around each occurence of the hook. View complete file in SVN (without highlighting).

Understanding Source Code

The best way to understand what a hook does is to look at where it occurs in the source code.

Remember, this hook may occur in more than one file. Moreover, the hook's context may change from version to version.

Source View

This hook occurs 9 times in this file.

Line Code
2126            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
2127            *
2128            * @since 2.8.0
2129            *
2130            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
2131            * @param string $email    The email address being checked.
2132            * @param string $message  An explanatory message to the user.
2133            * @param string $context  Context under which the email was tested.
2134            */
2135           return apply_filters( 'is_email', false, $email, 'email_too_short' );
2136      }
2137
2138      // Test for an @ character after the first position
2139      if ( strpos( $email, '@', 1 ) === false ) {
2140           /** This filter is documented in wp-includes/formatting.php */
2141           return apply_filters( 'is_email', false, $email, 'email_no_at' );
2142      }
2143
2144      // Split out the local and domain parts
2145      list( $local, $domain ) = explode( '@', $email, 2 );
2146
2147      // LOCAL PART
2148      // Test for invalid characters
2149      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
2150           /** This filter is documented in wp-includes/formatting.php */
2151           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
2152      }
2153
2154      // DOMAIN PART
2155      // Test for sequences of periods
2156      if ( preg_match( '/\.{2,}/', $domain ) ) {
2157           /** This filter is documented in wp-includes/formatting.php */
2158           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
2159      }
2160
2161      // Test for leading and trailing periods and whitespace
2162      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
2163           /** This filter is documented in wp-includes/formatting.php */
2164           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
2165      }
2166
2167      // Split the domain into subs
2168      $subs = explode( '.', $domain );
2169
2170      // Assume the domain will have at least two subs
2171      if ( 2 > count( $subs ) ) {
2172           /** This filter is documented in wp-includes/formatting.php */
2173           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
2174      }
2175
2176      // Loop through each sub
2177      foreach ( $subs as $sub ) {
2178           // Test for leading and trailing hyphens and whitespace
2179           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
2180                /** This filter is documented in wp-includes/formatting.php */
2181                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
2182           }
2183
2184           // Test for invalid characters
2185           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
2186                /** This filter is documented in wp-includes/formatting.php */
2187                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
2188           }
2189      }
2190
2191      // Congratulations your email made it!
2192      /** This filter is documented in wp-includes/formatting.php */
2193      return apply_filters( 'is_email', $email, $email, null );
2194 }
2195
2196 /**
2197  * Convert to ASCII from email subjects.
2198  *
2199  * @since 1.2.0
2200  *
2201  * @param string $string Subject line
2202  * @return string Converted string to ASCII