PHP 邮箱地址验证问题

ValueError 发布于 2011/02/15 10:33
阅读 4K+
收藏 1
PHP

邮箱地址验证是个很常见的问题,许多框架也内置了验证类,但是我见过的框架几乎都是通过正则表达式来验证的。PHP 不是有原生的验证函数,并且拥有 E-mail 地址验证功能吗?

if (filter_var("xxx@xxx.com", FILTER_VALIDATE_EMAIL)) {
// 有效
} else {
// 无效
}

那为何这些框架都舍近求远呢?是这个函数有什么缺陷或有不如正则匹配的地方吗?

加载中
0
红薯
红薯

可能很多人对这个方法并不熟悉吧,说起email地址验证第一想到的就是正则表达式

0
alex_deng
alex_deng

这个还真是不熟识,可能是因为以前写java用的都是正则来判断先入为主吧

0
ValueError
ValueError

既然这样我就试试把 Kohana 内置的 email 验证方法覆写成 filter_var 的,看看到底有什么问题

0
ValueError
ValueError

厄。。。

用microtime 计算的两种方法耗时:

不过基数太小了,可以忽略不计

0
alex_deng
alex_deng

引用来自#5楼“TonySeek”的帖子

厄。。。

用microtime 计算的两种方法耗时:

不过基数太小了,可以忽略不计

这个不知道你使用几个账号去测试的结果,虽然数值是很小,但是也是数量级的差距啊。例如做邮局的验证群发时候的邮箱账号,可能一次就几十 甚至上百那种,而且有几个企业都同时进行群发的时候,这个还是有一定的资源损耗的

0
ValueError
ValueError

引用来自#6楼“alex.deng”的帖子

引用来自#5楼“TonySeek”的帖子

厄。。。

用microtime 计算的两种方法耗时:

不过基数太小了,可以忽略不计

这个不知道你使用几个账号去测试的结果,虽然数值是很小,但是也是数量级的差距啊。例如做邮局的验证群发时候的邮箱账号,可能一次就几十 甚至上百那种,而且有几个企业都同时进行群发的时候,这个还是有一定的资源损耗的

不好意思,我截图没有截完整,也没有说清楚

上图第二行是指数结果的,各自乘以1000之后的结果是:

上面一行是使用Kohana_V3.09内置正则表达式验证的,下面是使用filter_var的。差别没那么大,二十倍左右

我各自只使用了一个帐号测试,但是刷新多次结果稳定。。。

	public function action_index()
	{
		$start = microtime(true);
		Validate::email1('abc@gmail.com');
		Validate::email1('abc@gmailcom');
		$start = (microtime(true)-$start)*1000;
		echo $start, '<br />';
		
		$start = microtime(true);
		Validate::email2('abc@gmail.com');
		Validate::email2('abc@gmailcom');
		$start = (microtime(true)-$start)*1000;
		echo $start, '<br />';
	}
我估计验证这类问题一般很少遇到像邮件一样“批量”的吧,如果真的遇到了,我个人觉得最好还是不要直接用PHP完成,而是使用后台服务。
0
该用户已被和谐
该用户已被和谐

用过这个,好像验证相当的不严格!俺没读过源代码....

0
ValueError
ValueError

引用来自#8楼“该用户已被和谐”的帖子

用过这个,好像验证相当的不严格!俺没读过源代码....

哇,是吗?“验证相当的不严格” 是指filter_var吗?

0
zuiw
zuiw

使用于  PHP 5 >= 5.2.0,之前是没有这个函数的,所以都用正则

0
ValueError
ValueError

引用来自#10楼“笃笃”的帖子

使用于  PHP 5 >= 5.2.0,之前是没有这个函数的,所以都用正则

可是 Kohana、ZF 都是面向 PHP 5.2/5.3 的框架呀

返回顶部
顶部