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
1493  * @param boolean $deprecated Deprecated.
1494  * @return string|bool Either false or the valid email address.
1495  */
1496 function is_email( $email, $deprecated = false ) {
1497      if ( ! empty( $deprecated ) )
1498           _deprecated_argument( __FUNCTION__, '3.0' );
1499
1500      // Test for the minimum length the email can be
1501      if ( strlen( $email ) < 3 ) {
1502           return apply_filters( 'is_email', false, $email, 'email_too_short' );
1503      }
1504
1505      // Test for an @ character after the first position
1506      if ( strpos( $email, '@', 1 ) === false ) {
1507           return apply_filters( 'is_email', false, $email, 'email_no_at' );
1508      }
1509
1510      // Split out the local and domain parts
1511      list( $local, $domain ) = explode( '@', $email, 2 );
1512
1513      // LOCAL PART
1514      // Test for invalid characters
1515      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
1516           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
1517      }
1518
1519      // DOMAIN PART
1520      // Test for sequences of periods
1521      if ( preg_match( '/\.{2,}/', $domain ) ) {
1522           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
1523      }
1524
1525      // Test for leading and trailing periods and whitespace
1526      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
1527           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
1528      }
1529
1530      // Split the domain into subs
1531      $subs = explode( '.', $domain );
1532
1533      // Assume the domain will have at least two subs
1534      if ( 2 > count( $subs ) ) {
1535           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
1536      }
1537
1538      // Loop through each sub
1539      foreach ( $subs as $sub ) {
1540           // Test for leading and trailing hyphens and whitespace
1541           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
1542                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
1543           }
1544
1545           // Test for invalid characters
1546           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
1547                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
1548           }
1549      }
1550
1551      // Congratulations your email made it!
1552      return apply_filters( 'is_email', $email, $email, null );
1553 }
1554
1555 /**
1556  * Convert to ASCII from email subjects.
1557  *
1558  * @since 1.2.0
1559  * @usedby wp_mail() handles charsets in email subjects
1560  *
1561  * @param string $string Subject line