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.

  • Action hooks look like this: do_action( "hook_name" )
  • Filter hooks look like this: apply_filters( "hook_name", "what_to_filter" ).

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