佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 678|回复: 2

php ereg()

[复制链接]
发表于 12-11-2008 08:44 AM | 显示全部楼层
你的EREG用得有点不对。
应该是类似以下 (只是随手写的Example, 没有经过PHP执行, 不确保会Work)
ereg("^([0-9A-Za-z_])+@([a-zA-Z0-9\-])+.+([a-zA-Z0-9\-\.])+$",$email);

第一组是说只接受大小写的A-Z,0到9和_, 放+的意思是说最少有一个才成立
@放在外面代表着在这之间至少要有@才成立。
第二组代表着Domain的前半段,可能是Subdomain或者Main Domain,没有dot。
然后加入一个.
之后就是Domain的Extension或Domain。

这个还有一点点不完美的地方, 你自己测试看看然后修改吧!

有错请各位高手纠正
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 12-11-2008 12:23 AM | 显示全部楼层 |阅读模式
我打算写一个 email的
youremail123abc@com.my

限定 英文 大小写 和数字 _ 的符号
ereg("[^ A-Z a-z $ , _ 0-9 @ *$ ].$email"

但是不可以 我还是不太会用ereg 来做判断
回复

使用道具 举报

发表于 12-11-2008 10:38 AM | 显示全部楼层
你可以用
  1. filter_var($email, FILTER_VALIDATE_EMAIL);
复制代码
或者
  1. preg_match("/^[^@ ]+@[^@ ]+\.[^@ ]+$/", $email);
复制代码
我做了BENCHMARK
  1.     $starttime = explode(' ', microtime());
  2.     $starttime = $starttime[1] + $starttime[0];

  3.     for ($num = 0; $num < 1000; $num++)
  4.     {
  5.         filter_var($email, FILTER_VALIDATE_EMAIL);
  6.     }

  7.     $endtime = explode(' ', microtime());
  8.     $endtime = $endtime[1] + $endtime[0];
复制代码
OUTPUT TIME: 0.0191738605499
  1.     $starttime = explode(' ', microtime());
  2.     $starttime = $starttime[1] + $starttime[0];

  3.     for ($num = 0; $num < 1000; $num++)
  4.     {
  5.         preg_match("/^[^@ ]+@[^@ ]+\.[^@ ]+$/", $email);
  6.     }

  7.     $endtime = explode(' ', microtime());
  8.     $endtime = $endtime[1] + $endtime[0];
复制代码
OUTPUT TIME: 0.00431489944458

PHP FILTER 虽然方便,但是 preg_match 明显比较快。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-12-2025 10:25 PM , Processed in 0.118206 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表