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
2486            * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits',
2487            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
2488            *
2489            * @since 2.8.0
2490            *
2491            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
2492            * @param string $email    The email address being checked.
2493            * @param string $context  Context under which the email was tested.
2494            */
2495           return apply_filters( 'is_email', false, $email, 'email_too_short' );
2496      }
2497
2498      // Test for an @ character after the first position
2499      if ( strpos( $email, '@', 1 ) === false ) {
2500           /** This filter is documented in wp-includes/formatting.php */
2501           return apply_filters( 'is_email', false, $email, 'email_no_at' );
2502      }
2503
2504      // Split out the local and domain parts
2505      list( $local, $domain ) = explode( '@', $email, 2 );
2506
2507      // LOCAL PART
2508      // Test for invalid characters
2509      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
2510           /** This filter is documented in wp-includes/formatting.php */
2511           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
2512      }
2513
2514      // DOMAIN PART
2515      // Test for sequences of periods
2516      if ( preg_match( '/\.{2,}/', $domain ) ) {
2517           /** This filter is documented in wp-includes/formatting.php */
2518           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
2519      }
2520
2521      // Test for leading and trailing periods and whitespace
2522      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
2523           /** This filter is documented in wp-includes/formatting.php */
2524           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
2525      }
2526
2527      // Split the domain into subs
2528      $subs = explode( '.', $domain );
2529
2530      // Assume the domain will have at least two subs
2531      if ( 2 > count( $subs ) ) {
2532           /** This filter is documented in wp-includes/formatting.php */
2533           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
2534      }
2535
2536      // Loop through each sub
2537      foreach ( $subs as $sub ) {
2538           // Test for leading and trailing hyphens and whitespace
2539           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
2540                /** This filter is documented in wp-includes/formatting.php */
2541                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
2542           }
2543
2544           // Test for invalid characters
2545           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
2546                /** This filter is documented in wp-includes/formatting.php */
2547                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
2548           }
2549      }
2550
2551      // Congratulations your email made it!
2552      /** This filter is documented in wp-includes/formatting.php */
2553      return apply_filters( 'is_email', $email, $email, null );
2554 }
2555
2556 /**
2557  * Convert to ASCII from email subjects.
2558  *
2559  * @since 1.2.0
2560  *
2561  * @param string $string Subject line
2562  * @return string Converted string to ASCII