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
2862            * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits',
2863            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
2864            *
2865            * @since 2.8.0
2866            *
2867            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
2868            * @param string $email    The email address being checked.
2869            * @param string $context  Context under which the email was tested.
2870            */
2871           return apply_filters( 'is_email', false, $email, 'email_too_short' );
2872      }
2873
2874      // Test for an @ character after the first position
2875      if ( strpos( $email, '@', 1 ) === false ) {
2876           /** This filter is documented in wp-includes/formatting.php */
2877           return apply_filters( 'is_email', false, $email, 'email_no_at' );
2878      }
2879
2880      // Split out the local and domain parts
2881      list( $local, $domain ) = explode( '@', $email, 2 );
2882
2883      // LOCAL PART
2884      // Test for invalid characters
2885      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
2886           /** This filter is documented in wp-includes/formatting.php */
2887           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
2888      }
2889
2890      // DOMAIN PART
2891      // Test for sequences of periods
2892      if ( preg_match( '/\.{2,}/', $domain ) ) {
2893           /** This filter is documented in wp-includes/formatting.php */
2894           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
2895      }
2896
2897      // Test for leading and trailing periods and whitespace
2898      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
2899           /** This filter is documented in wp-includes/formatting.php */
2900           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
2901      }
2902
2903      // Split the domain into subs
2904      $subs = explode( '.', $domain );
2905
2906      // Assume the domain will have at least two subs
2907      if ( 2 > count( $subs ) ) {
2908           /** This filter is documented in wp-includes/formatting.php */
2909           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
2910      }
2911
2912      // Loop through each sub
2913      foreach ( $subs as $sub ) {
2914           // Test for leading and trailing hyphens and whitespace
2915           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
2916                /** This filter is documented in wp-includes/formatting.php */
2917                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
2918           }
2919
2920           // Test for invalid characters
2921           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
2922                /** This filter is documented in wp-includes/formatting.php */
2923                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
2924           }
2925      }
2926
2927      // Congratulations your email made it!
2928      /** This filter is documented in wp-includes/formatting.php */
2929      return apply_filters( 'is_email', $email, $email, null );
2930 }
2931
2932 /**
2933  * Convert to ASCII from email subjects.
2934  *
2935  * @since 1.2.0
2936  *
2937  * @param string $string Subject line
2938  * @return string Converted string to ASCII