is_email( string $email, bool $deprecated = false )

Verifies that an email is valid.


Description Description

Does not grok i18n domains. Not RFC compliant.


Parameters Parameters

$email

(string) (Required) Email address to verify.

$deprecated

(bool) (Optional) Deprecated.

Default value: false


Top ↑

Return Return

(string|bool) Either false or the valid email address.


Top ↑

Source Source

File: wp-includes/formatting.php

3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
function is_email( $email, $deprecated = false ) {
    if ( ! empty( $deprecated ) ) {
        _deprecated_argument( __FUNCTION__, '3.0.0' );
    }
 
    // Test for the minimum length the email can be
    if ( 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' );
    }
 
    // 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 );
}

Top ↑

Changelog Changelog

Changelog
Version Description
0.71 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.