Menu Adam R Brown

WP hooks navigation: Home/browseActions indexFilters index

Source View: sanitize_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 8 times in this file.

Line Code
2238            * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits',
2239            * 'domain_no_periods', 'domain_no_valid_subs', or no context.
2240            *
2241            * @since 2.8.0
2242            *
2243            * @param string $email   The sanitized email address.
2244            * @param string $email   The email address, as provided to sanitize_email().
2245            * @param string $message A message to pass to the user.
2246            */
2247           return apply_filters( 'sanitize_email', '', $email, 'email_too_short' );
2248      }
2249
2250      // Test for an @ character after the first position
2251      if ( strpos( $email, '@', 1 ) === false ) {
2252           /** This filter is documented in wp-includes/formatting.php */
2253           return apply_filters( 'sanitize_email', '', $email, 'email_no_at' );
2254      }
2255
2256      // Split out the local and domain parts
2257      list( $local, $domain ) = explode( '@', $email, 2 );
2258
2259      // LOCAL PART
2260      // Test for invalid characters
2261      $local = preg_replace( '/[^a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]/', '', $local );
2262      if ( '' === $local ) {
2263           /** This filter is documented in wp-includes/formatting.php */
2264           return apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' );
2265      }
2266
2267      // DOMAIN PART
2268      // Test for sequences of periods
2269      $domain = preg_replace( '/\.{2,}/', '', $domain );
2270      if ( '' === $domain ) {
2271           /** This filter is documented in wp-includes/formatting.php */
2272           return apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' );
2273      }
2274
2275      // Test for leading and trailing periods and whitespace
2276      $domain = trim( $domain, " \t\n\r\0\x0B." );
2277      if ( '' === $domain ) {
2278           /** This filter is documented in wp-includes/formatting.php */
2279           return apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' );
2280      }
2281
2282      // Split the domain into subs
2283      $subs = explode( '.', $domain );
2284
2285      // Assume the domain will have at least two subs
2286      if ( 2 > count( $subs ) ) {
2287           /** This filter is documented in wp-includes/formatting.php */
2288           return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' );
2289      }
2290
2291      // Create an array that will contain valid subs
2292      $new_subs = array();
2293
2294      // Loop through each sub
2295      foreach ( $subs as $sub ) {
2296           // Test for leading and trailing hyphens
2297           $sub = trim( $sub, " \t\n\r\0\x0B-" );
 
Line Code
2302           // If there's anything left, add it to the valid subs
2303           if ( '' !== $sub ) {
2304                $new_subs[] = $sub;
2305           }
2306      }
2307
2308      // If there aren't 2 or more valid subs
2309      if ( 2 > count( $new_subs ) ) {
2310           /** This filter is documented in wp-includes/formatting.php */
2311           return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' );
2312      }
2313
2314      // Join valid subs into the new domain
2315      $domain = join( '.', $new_subs );
2316
2317      // Put the email back together
2318      $email = $local . '@' . $domain;
2319
2320      // Congratulations your email made it!
2321      /** This filter is documented in wp-includes/formatting.php */
2322      return apply_filters( 'sanitize_email', $email, $email, null );
2323 }
2324
2325 /**
2326  * Determines the difference between two timestamps.
2327  *
2328  * The difference is returned in a human readable format such as "1 hour",
2329  * "5 mins", "2 days".
2330  *
2331  * @since 1.5.0