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.

  • Action hooks look like this: do_action( "hook_name" )
  • Filter hooks look like this: apply_filters( "hook_name", "what_to_filter" ).

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
2380            * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context.
2381            *
2382            * @since 2.8.0
2383            *
2384            * @param bool   $is_email Whether the email address has passed the is_email() checks. Default false.
2385            * @param string $email    The email address being checked.
2386            * @param string $message  An explanatory message to the user.
2387            * @param string $context  Context under which the email was tested.
2388            */
2389           return apply_filters( 'is_email', false, $email, 'email_too_short' );
2390      }
2391
2392      // Test for an @ character after the first position
2393      if ( strpos( $email, '@', 1 ) === false ) {
2394           /** This filter is documented in wp-includes/formatting.php */
2395           return apply_filters( 'is_email', false, $email, 'email_no_at' );
2396      }
2397
2398      // Split out the local and domain parts
2399      list( $local, $domain ) = explode( '@', $email, 2 );
2400
2401      // LOCAL PART
2402      // Test for invalid characters
2403      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
2404           /** This filter is documented in wp-includes/formatting.php */
2405           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
2406      }
2407
2408      // DOMAIN PART
2409      // Test for sequences of periods
2410      if ( preg_match( '/\.{2,}/', $domain ) ) {
2411           /** This filter is documented in wp-includes/formatting.php */
2412           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
2413      }
2414
2415      // Test for leading and trailing periods and whitespace
2416      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
2417           /** This filter is documented in wp-includes/formatting.php */
2418           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
2419      }
2420
2421      // Split the domain into subs
2422      $subs = explode( '.', $domain );
2423
2424      // Assume the domain will have at least two subs
2425      if ( 2 > count( $subs ) ) {
2426           /** This filter is documented in wp-includes/formatting.php */
2427           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
2428      }
2429
2430      // Loop through each sub
2431      foreach ( $subs as $sub ) {
2432           // Test for leading and trailing hyphens and whitespace
2433           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
2434                /** This filter is documented in wp-includes/formatting.php */
2435                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
2436           }
2437
2438           // Test for invalid characters
2439           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
2440                /** This filter is documented in wp-includes/formatting.php */
2441                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
2442           }
2443      }
2444
2445      // Congratulations your email made it!
2446      /** This filter is documented in wp-includes/formatting.php */
2447      return apply_filters( 'is_email', $email, $email, null );
2448 }
2449
2450 /**
2451  * Convert to ASCII from email subjects.
2452  *
2453  * @since 1.2.0
2454  *
2455  * @param string $string Subject line
2456  * @return string Converted string to ASCII