if ( is_email( '[email protected]' ) ) {
echo 'email address is valid.';
}
Created
May 8, 2019 07:59
-
-
Save lenivene/e7da6f2612060bfd278b63042bd327f3 to your computer and use it in GitHub Desktop.
'recode' WordPress function - is_email()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Verifies that an email is valid. | |
* | |
* @param $email (string) (Required) Email address to verify. | |
* @return (string|bool) Either false or the valid email address. | |
*/ | |
function is_email( $email ){ | |
// Test for the minimum length the email can be | |
if ( mb_strlen( $email ) < 6 ) { | |
/** | |
* Filters whether an email address is valid. | |
* | |
* This filter is evaluated under several different contexts, such as 'email_too_short', | |
* 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits', | |
* 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context. | |
* | |
* @since 2.8.0 | |
* | |
* @param bool $is_email Whether the email address has passed the is_email() checks. Default false. | |
* @param string $email The email address being checked. | |
* @param string $context Context under which the email was tested. | |
*/ | |
return apply_filters( 'is_email', false, $email, 'email_too_short' ); | |
} | |
if( function_exists( 'filter_var' ) ){ | |
$is_valid = (bool) filter_var( $email, FILTER_VALIDATE_EMAIL ); | |
$context = $email; | |
if( ! $is_valid ){ | |
$context = false; | |
} | |
return apply_filters( 'is_email', $context, $email, null ); | |
} | |
else{ | |
// Test for an @ character after the first position | |
if ( strpos( $email, '@', 1 ) === false ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'email_no_at' ); | |
} | |
// Split out the local and domain parts | |
list( $local, $domain ) = explode( '@', $email, 2 ); | |
// LOCAL PART | |
// Test for invalid characters | |
if ( ! preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'local_invalid_chars' ); | |
} | |
// DOMAIN PART | |
// Test for sequences of periods | |
if ( preg_match( '/\.{2,}/', $domain ) ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'domain_period_sequence' ); | |
} | |
// Test for leading and trailing periods and whitespace | |
if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'domain_period_limits' ); | |
} | |
// Split the domain into subs | |
$subs = explode( '.', $domain ); | |
// Assume the domain will have at least two subs | |
if ( 2 > count( $subs ) ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'domain_no_periods' ); | |
} | |
// Loop through each sub | |
foreach ( $subs as $sub ) { | |
// Test for leading and trailing hyphens and whitespace | |
if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' ); | |
} | |
// Test for invalid characters | |
if ( ! preg_match( '/^[a-z0-9-]+$/i', $sub ) ) { | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' ); | |
} | |
} | |
// Congratulations your email made it! | |
/** This filter is documented in wp-includes/formatting.php */ | |
return apply_filters( 'is_email', $email, $email, null ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment