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