Advertisements

sanitize_email

Definition:
function sanitize_email( $email ) {}

Strips out all characters that are not allowable in an email.

Parameters

  • string $email: Email address to filter.

Return values

returns:Filtered email address.

Defined filters

  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'email_too_short' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'email_no_at' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' )
  • sanitize_email
    apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' )
  • sanitize_email
    apply_filters( 'sanitize_email', $email, $email, null )

Source code

function sanitize_email( $email ) {

	// Test for the minimum length the email can be

	if ( strlen( $email ) < 3 ) {

		return apply_filters( 'sanitize_email', '', $email, 'email_too_short' );

	}



	// Test for an @ character after the first position

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

		return apply_filters( 'sanitize_email', '', $email, 'email_no_at' );

	}



	// Split out the local and domain parts

	list( $local, $domain ) = explode( '@', $email, 2 );



	// LOCAL PART

	// Test for invalid characters

	$local = preg_replace( '/[^a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]/', '', $local );

	if ( '' === $local ) {

		return apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' );

	}



	// DOMAIN PART

	// Test for sequences of periods

	$domain = preg_replace( '/\.{2,}/', '', $domain );

	if ( '' === $domain ) {

		return apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' );

	}



	// Test for leading and trailing periods and whitespace

	$domain = trim( $domain, " \t\n\r\0\x0B." );

	if ( '' === $domain ) {

		return apply_filters( 'sanitize_email', '', $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( 'sanitize_email', '', $email, 'domain_no_periods' );

	}



	// Create an array that will contain valid subs

	$new_subs = array();



	// Loop through each sub

	foreach ( $subs as $sub ) {

		// Test for leading and trailing hyphens

		$sub = trim( $sub, " \t\n\r\0\x0B-" );



		// Test for invalid characters

		$sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub );



		// If there's anything left, add it to the valid subs

		if ( '' !== $sub ) {

			$new_subs[] = $sub;

		}

	}



	// If there aren't 2 or more valid subs

	if ( 2 > count( $new_subs ) ) {

		return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' );

	}



	// Join valid subs into the new domain

	$domain = join( '.', $new_subs );



	// Put the email back together

	$email = $local . '@' . $domain;



	// Congratulations your email made it!

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

}

2769

Advertisements

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: