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
1785  * @param boolean $deprecated Deprecated.
1786  * @return string|bool Either false or the valid email address.
1787  */
1788 function is_email( $email, $deprecated = false ) {
1789      if ( ! empty( $deprecated ) )
1790           _deprecated_argument( __FUNCTION__, '3.0' );
1791
1792      // Test for the minimum length the email can be
1793      if ( strlen( $email ) < 3 ) {
1794           return apply_filters( 'is_email', false, $email, 'email_too_short' );
1795      }
1796
1797      // Test for an @ character after the first position
1798      if ( strpos( $email, '@', 1 ) === false ) {
1799           return apply_filters( 'is_email', false, $email, 'email_no_at' );
1800      }
1801
1802      // Split out the local and domain parts
1803      list( $local, $domain ) = explode( '@', $email, 2 );
1804
1805      // LOCAL PART
1806      // Test for invalid characters
1807      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
1808           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
1809      }
1810
1811      // DOMAIN PART
1812      // Test for sequences of periods
1813      if ( preg_match( '/\.{2,}/', $domain ) ) {
1814           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
1815      }
1816
1817      // Test for leading and trailing periods and whitespace
1818      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
1819           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
1820      }
1821
1822      // Split the domain into subs
1823      $subs = explode( '.', $domain );
1824
1825      // Assume the domain will have at least two subs
1826      if ( 2 > count( $subs ) ) {
1827           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
1828      }
1829
1830      // Loop through each sub
1831      foreach ( $subs as $sub ) {
1832           // Test for leading and trailing hyphens and whitespace
1833           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
1834                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
1835           }
1836
1837           // Test for invalid characters
1838           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
1839                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
1840           }
1841      }
1842
1843      // Congratulations your email made it!
1844      return apply_filters( 'is_email', $email, $email, null );
1845 }
1846
1847 /**
1848  * Convert to ASCII from email subjects.
1849  *
1850  * @since 1.2.0
1851  *
1852  * @param string $string Subject line
1853  * @return string Converted string to ASCII