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
3266            * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits',
3267            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
3268            *
3269            * @since 2.8.0
3270            *
3271            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
3272            * @param string $email    The email address being checked.
3273            * @param string $context  Context under which the email was tested.
3274            */
3275           return apply_filters( 'is_email', false, $email, 'email_too_short' );
3276      }
3277
3278      // Test for an @ character after the first position
3279      if ( strpos( $email, '@', 1 ) === false ) {
3280           /** This filter is documented in wp-includes/formatting.php */
3281           return apply_filters( 'is_email', false, $email, 'email_no_at' );
3282      }
3283
3284      // Split out the local and domain parts
3285      list( $local, $domain ) = explode( '@', $email, 2 );
3286
3287      // LOCAL PART
3288      // Test for invalid characters
3289      if ( ! preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
3290           /** This filter is documented in wp-includes/formatting.php */
3291           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
3292      }
3293
3294      // DOMAIN PART
3295      // Test for sequences of periods
3296      if ( preg_match( '/\.{2,}/', $domain ) ) {
3297           /** This filter is documented in wp-includes/formatting.php */
3298           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
3299      }
3300
3301      // Test for leading and trailing periods and whitespace
3302      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
3303           /** This filter is documented in wp-includes/formatting.php */
3304           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
3305      }
3306
3307      // Split the domain into subs
3308      $subs = explode( '.', $domain );
3309
3310      // Assume the domain will have at least two subs
3311      if ( 2 > count( $subs ) ) {
3312           /** This filter is documented in wp-includes/formatting.php */
3313           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
3314      }
3315
3316      // Loop through each sub
3317      foreach ( $subs as $sub ) {
3318           // Test for leading and trailing hyphens and whitespace
3319           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
3320                /** This filter is documented in wp-includes/formatting.php */
3321                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
3322           }
3323
3324           // Test for invalid characters
3325           if ( ! preg_match( '/^[a-z0-9-]+$/i', $sub ) ) {
3326                /** This filter is documented in wp-includes/formatting.php */
3327                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
3328           }
3329      }
3330
3331      // Congratulations your email made it!
3332      /** This filter is documented in wp-includes/formatting.php */
3333      return apply_filters( 'is_email', $email, $email, null );
3334 }
3335
3336 /**
3337  * Convert to ASCII from email subjects.
3338  *
3339  * @since 1.2.0
3340  *
3341  * @param string $string Subject line
3342  * @return string Converted string to ASCII