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 10 times in this file.

Line Code
1469  * @since 0.71
1470  *
1471  * @param string $email Email address to verify.
1472  * @param boolean $check_dns Whether to check the DNS for the domain using checkdnsrr().
1473  * @return string|bool Either false or the valid email address.
1474  */
1475 function is_email( $email, $check_dns = false ) {
1476      // Test for the minimum length the email can be
1477      if ( strlen( $email ) < 3 ) {
1478           return apply_filters( 'is_email', false, $email, 'email_too_short' );
1479      }
1480
1481      // Test for an @ character after the first position
1482      if ( strpos( $email, '@', 1 ) === false ) {
1483           return apply_filters( 'is_email', false, $email, 'email_no_at' );
1484      }
1485
1486      // Split out the local and domain parts
1487      list( $local, $domain ) = explode( '@', $email, 2 );
1488
1489      // LOCAL PART
1490      // Test for invalid characters
1491      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
1492           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
1493      }
1494
1495      // DOMAIN PART
1496      // Test for sequences of periods
1497      if ( preg_match( '/\.{2,}/', $domain ) ) {
1498           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
1499      }
1500
1501      // Test for leading and trailing periods and whitespace
1502      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
1503           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
1504      }
1505
1506      // Split the domain into subs
1507      $subs = explode( '.', $domain );
1508
1509      // Assume the domain will have at least two subs
1510      if ( 2 > count( $subs ) ) {
1511           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
1512      }
1513
1514      // Loop through each sub
1515      foreach ( $subs as $sub ) {
1516           // Test for leading and trailing hyphens and whitespace
1517           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
1518                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
1519           }
1520
1521           // Test for invalid characters
1522           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
1523                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
1524           }
1525      }
1526
1527      // DNS
1528      // Check the domain has a valid MX and A resource record
1529      if ( $check_dns && function_exists( 'checkdnsrr' ) && !( checkdnsrr( $domain . '.', 'MX' ) || checkdnsrr( $domain . '.', 'A' ) ) ) {
1530           return apply_filters( 'is_email', false, $email, 'dns_no_rr' );
1531      }
1532
1533      // Congratulations your email made it!
1534      return apply_filters( 'is_email', $email, $email, null );
1535 }
1536
1537 /**
1538  * Convert to ASCII from email subjects.
1539  *
1540  * @since 1.2.0
1541  * @usedby wp_mail() handles charsets in email subjects
1542  *
1543  * @param string $string Subject line