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
2896            * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits',
2897            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
2898            *
2899            * @since 2.8.0
2900            *
2901            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
2902            * @param string $email    The email address being checked.
2903            * @param string $context  Context under which the email was tested.
2904            */
2905           return apply_filters( 'is_email', false, $email, 'email_too_short' );
2906      }
2907
2908      // Test for an @ character after the first position
2909      if ( strpos( $email, '@', 1 ) === false ) {
2910           /** This filter is documented in wp-includes/formatting.php */
2911           return apply_filters( 'is_email', false, $email, 'email_no_at' );
2912      }
2913
2914      // Split out the local and domain parts
2915      list( $local, $domain ) = explode( '@', $email, 2 );
2916
2917      // LOCAL PART
2918      // Test for invalid characters
2919      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
2920           /** This filter is documented in wp-includes/formatting.php */
2921           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
2922      }
2923
2924      // DOMAIN PART
2925      // Test for sequences of periods
2926      if ( preg_match( '/\.{2,}/', $domain ) ) {
2927           /** This filter is documented in wp-includes/formatting.php */
2928           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
2929      }
2930
2931      // Test for leading and trailing periods and whitespace
2932      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
2933           /** This filter is documented in wp-includes/formatting.php */
2934           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
2935      }
2936
2937      // Split the domain into subs
2938      $subs = explode( '.', $domain );
2939
2940      // Assume the domain will have at least two subs
2941      if ( 2 > count( $subs ) ) {
2942           /** This filter is documented in wp-includes/formatting.php */
2943           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
2944      }
2945
2946      // Loop through each sub
2947      foreach ( $subs as $sub ) {
2948           // Test for leading and trailing hyphens and whitespace
2949           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
2950                /** This filter is documented in wp-includes/formatting.php */
2951                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
2952           }
2953
2954           // Test for invalid characters
2955           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
2956                /** This filter is documented in wp-includes/formatting.php */
2957                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
2958           }
2959      }
2960
2961      // Congratulations your email made it!
2962      /** This filter is documented in wp-includes/formatting.php */
2963      return apply_filters( 'is_email', $email, $email, null );
2964 }
2965
2966 /**
2967  * Convert to ASCII from email subjects.
2968  *
2969  * @since 1.2.0
2970  *
2971  * @param string $string Subject line
2972  * @return string Converted string to ASCII