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.

  • Action hooks look like this: do_action( "hook_name" )
  • Filter hooks look like this: apply_filters( "hook_name", "what_to_filter" ).

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