is_email

Definition:
function is_email( $email, $deprecated = false ) {}

Verifies that an email is valid.
Does not grok i18n domains. Not RFC compliant.

Parameters

  • string $email: Email address to verify.
  • boolean $deprecated: Deprecated.

Return values

returns:Either false or the valid email address.

Defined filters

  • is_email
    apply_filters( 'is_email', false, $email, 'email_too_short' )
  • is_email
    apply_filters( 'is_email', false, $email, 'email_no_at' )
  • is_email
    apply_filters( 'is_email', false, $email, 'local_invalid_chars' )
  • is_email
    apply_filters( 'is_email', false, $email, 'domain_period_sequence' )
  • is_email
    apply_filters( 'is_email', false, $email, 'domain_period_limits' )
  • is_email
    apply_filters( 'is_email', false, $email, 'domain_no_periods' )
  • is_email
    apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' )
  • is_email
    apply_filters( 'is_email', false, $email, 'sub_invalid_chars' )
  • is_email
    apply_filters( 'is_email', $email, $email, null )

Source code

function is_email( $email, $deprecated = false ) {

	if ( ! empty( $deprecated ) )

		_deprecated_argument( __FUNCTION__, '3.0' );



	// Test for the minimum length the email can be

	if ( strlen( $email ) < 3 ) {

		return apply_filters( 'is_email', false, $email, 'email_too_short' );

	}



	// Test for an @ character after the first position

	if ( strpos( $email, '@', 1 ) === false ) {

		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 ) ) {

		return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );

	}



	// DOMAIN PART

	// Test for sequences of periods

	if ( preg_match( '/\.{2,}/', $domain ) ) {

		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 ) {

		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 ) ) {

		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 ) {

			return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );

		}



		// Test for invalid characters

		if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {

			return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );

		}

	}



	// Congratulations your email made it!

	return apply_filters( 'is_email', $email, $email, null );

}

2115

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: