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
1812  * @param boolean $deprecated Deprecated.
1813  * @return string|bool Either false or the valid email address.
1814  */
1815 function is_email( $email, $deprecated = false ) {
1816      if ( ! empty( $deprecated ) )
1817           _deprecated_argument( __FUNCTION__, '3.0' );
1818
1819      // Test for the minimum length the email can be
1820      if ( strlen( $email ) < 3 ) {
1821           return apply_filters( 'is_email', false, $email, 'email_too_short' );
1822      }
1823
1824      // Test for an @ character after the first position
1825      if ( strpos( $email, '@', 1 ) === false ) {
1826           return apply_filters( 'is_email', false, $email, 'email_no_at' );
1827      }
1828
1829      // Split out the local and domain parts
1830      list( $local, $domain ) = explode( '@', $email, 2 );
1831
1832      // LOCAL PART
1833      // Test for invalid characters
1834      if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) {
1835           return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
1836      }
1837
1838      // DOMAIN PART
1839      // Test for sequences of periods
1840      if ( preg_match( '/\.{2,}/', $domain ) ) {
1841           return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
1842      }
1843
1844      // Test for leading and trailing periods and whitespace
1845      if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) {
1846           return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
1847      }
1848
1849      // Split the domain into subs
1850      $subs = explode( '.', $domain );
1851
1852      // Assume the domain will have at least two subs
1853      if ( 2 > count( $subs ) ) {
1854           return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
1855      }
1856
1857      // Loop through each sub
1858      foreach ( $subs as $sub ) {
1859           // Test for leading and trailing hyphens and whitespace
1860           if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) {
1861                return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
1862           }
1863
1864           // Test for invalid characters
1865           if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
1866                return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
1867           }
1868      }
1869
1870      // Congratulations your email made it!
1871      return apply_filters( 'is_email', $email, $email, null );
1872 }
1873
1874 /**
1875  * Convert to ASCII from email subjects.
1876  *
1877  * @since 1.2.0
1878  *
1879  * @param string $string Subject line
1880  * @return string Converted string to ASCII