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