使用PHP来检验Email地址是否真实有效的邮址

这几天一直在想一个项目,在想这个项目执行里将会遇到的几个关键点。当然这些还停留在IDEA上,其它一个关键点就正好需要用到检验邮箱是否真实有效。这几天也找了些资料,除了找到一个WEBXML的收费接口外,还真的很少介绍如何检验邮箱有效性。

网上的通常做法有两种方式(或结合起来):
第一是检验邮箱格式是否正确;
第二是向邮箱发送一封邮件,邮箱用户通用一个链接地址来进行确认。

但这些方式并不适合于我的想法。刚找到一篇文章,正是我想的方法。OH~YEAR~~
方法如下:

function validEmail($email) {
	$isValid = true;
	$atIndex = strrpos ( $email, "@" );
	if (is_bool ( $atIndex ) && ! $atIndex) {
	$isValid = false;
	} else {
	$domain = substr ( $email, $atIndex + 1 );
	$local = substr ( $email, 0, $atIndex );
	$localLen = strlen ( $local );
	$domainLen = strlen ( $domain );
	if ($localLen < 1 || $localLen > 64) {
	// local part length exceeded
	$isValid = false;
	} else if ($domainLen < 1 || $domainLen > 255) {
	// domain part length exceeded
	$isValid = false;
	} else if ($local [0] == '.' || $local [$localLen - 1] == '.') {
	// local part starts or ends with '.'
	$isValid = false;
	} else if (preg_match ( '/\\.\\./', $local )) {
	// local part has two consecutive dots
	$isValid = false;
	} else if (! preg_match ( '/^[A-Za-z0-9\\-\\.]+$/', $domain )) {
	// character not valid in domain part
	$isValid = false;
	} else if (preg_match ( '/\\.\\./', $domain )) {
	// domain part has two consecutive dots
	$isValid = false;
	} else if (! preg_match ( '/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace ( "\\\\", "", $local ) )) {
	// character not valid in local part unless 
	// local part is quoted
	if (! preg_match ( '/^"(\\\\"|[^"])+"$/', str_replace ( "\\\\", "", $local ) )) {
		$isValid = false;
	}
	}
	//5.3.0 This function is now available on Windows platforms. 
	if ($isValid && ! (checkdnsrr ( $domain, "MX" ) || checkdnsrr ( $domain, "A" ))) {
	// domain not found in DNS
	$isValid = false;
	}
	}
	return $isValid;
}

以上方法转载自:http://rocing.cn/show-387-1.html
原始方法出自:http://www.linuxjournal.com/article/9585

相关日志

发表于:2011-07-15 14:21:35 at 14:21 分类:代码 2条评论 Tags:,

2 Comments»

  1. 李亚说道:

    这个怎么用啊,能不能出一份完整的源码啊。

发表评论

(必填)

(必填)您的电子邮箱不会被公开。

正在加载信息...

Archives