/**
* 電子メールが有効であることを確認します。
*
* i18n ドメインを調べません。 RFC に準拠していません。
*
* @0.71 以降
*
* @param string $email 確認する電子メール アドレス。
* @param boolean $deprecated 非推奨。
* @return string|bool false または有効な電子メール アドレス。
*/
関数 is_email( $email, $deprecated = false ) {
if ( ! empty( $deprecated ) )
_deprecated_argument( __FUNCTION__, '3.0' );
// メールの最小長をテストします
if ( strlen( $email )
return apply_filters( 'is_email', false, $email, 'email_too_short' );
}
// 最初の位置の後の @ 文字をテストします
if ( strpos( $email, '@', 1 ) === false ) {
return apply_filters( 'is_email', false, $email, 'email_no_at' );
}
// ローカル部分とドメイン部分を分割します
list( $local, $domain ) =explode( '@', $email, 2 );
// ローカル部分
// 無効な文字をテストします
if ( !preg_match( '/^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+$/', $local ) ) {
return apply_filters( 'is_email', false, $email, 'local_invalid_chars' );
}
// ドメイン部分
// 一連のピリオドをテストします
if ( preg_match( '/.{2,}/', $domain ) ) {
return apply_filters( 'is_email', false, $email, 'domain_period_sequence' );
}
// 先頭と末尾のピリオドと空白をテストします
if (trim( $domain, " tnrx0B." ) !== $domain ) {
return apply_filters( 'is_email', false, $email, 'domain_period_limits' );
}
// ドメインをサブに分割します
$subs =explode( '.', $domain );
// ドメインには少なくとも 2 つのサブドメインがあると仮定します
if ( 2 > count( $subs ) ) {
return apply_filters( 'is_email', false, $email, 'domain_no_periods' );
}
// 各サブをループします
foreach ( $subs として $sub ) {
// 先頭と末尾のハイフンと空白をテストします
if (トリム( $sub, " tnrx0B-" ) !== $sub ) {
return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' );
}
// 無効な文字をテストします
if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) {
return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' );
}
}
// おめでとうございます。メールが届きました!
return apply_filters( 'is_email', $email, $email, null );
}
|