email正则表达式:/^[a-zA-Z0-9_\.]+@[a-zA-Z0-9-]+[\.a-zA-Z]+$/
2、根据
(1)email前缀规则:
英文26个字母、10个阿拉伯数字、点、减号或下划线组成,只能以数字或字母开头和结尾
(2)域名命名规则:
英文26个字母、10个阿拉伯数字、减号组成,只能以数字或字母开头和结尾,总共不能超过63个字符
得:
域名拆解成:(a-b.)+和a两段
<?php
class isEmail{
public function run($str){
if(!eregi("^[a-z0-9]+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){2,63}[a-z0-9]+$",$str)){
return false;
}else{
return true;
}
}
}
$isEmail=new isEmail;
if($isEmail->run("a___--...s-.d@fs-d.f--d.fd.f-as-d.com")==false){
echo "email is wrong";
}
?>
3、
CODE:
1. < ?php
2. if (ereg(“/^[a-z]([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i; ”,$email)){
3. echo “Your email address is correct!”;}
4. else{
5. echo “Please try again!”;
6. }
7. ?>
国际域名格式如下:
域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i;
/内容/i 构成一个不区分大小写的正则表达式;
^ 匹配开始
$ 匹配结束
[a-z] E-Mail前缀必需是一个英文字母开头
([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。
*表示0个或多个前面的字符.
[a-z0-9]* 匹配0个或多个英文字母或者数字
[-_]? 匹配0个或1“-”,因为“-”不能连续出现
[a-z0-9]+ 匹配1个或多个英文字母或者数字,因为“-”不能做为结尾
@ 必需有个有@
([a-z0-9]*[-_]?[a-z0-9]+)+ 见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。
[\.] 将特殊字符(.)当成普通字符
[a-z]{2,3} 匹配2个至3个英文字母,一般为com或者net等.
([\.][a-z]{2})? 匹配0个或者1个[\.][a-z]{2}(比如.cn等) 我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}
完美E-Mail正则表达式,附详细讲解,请大家帮忙测试一下! 2.抽取字符串中的email:
<?php
function getEmail($str) {
$pattern = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
preg_match_all($pattern,$str,$emailArr);
return $emailArr[0];
}
$emailstr = "俺不是米vi地方就开iid邮件列表: 和;.;;,";
$emailArr = getEmail($emailstr);
echo "<pre>";
print_r($emailArr);
echo "</pre>";
?>
打印如下:
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
)
3.比较:第2里的正则里没有了第1的^和$;
4、
相信学过PHP的人都应该知道下面这段用于eamil校验的语句,但是真正能看懂的就不多了:
以下为引用的内容:
<?php
if (eregi("^[_.0-z-]+@([0-z][0-z-]+.)+[a-z]{2,3}$",$email)) {
echo "您的 E-Mail 通过初步检查";
}
?>
在这句话里,首先是应用了一个eregi函数,这个函数还算好理解。随便找本书,就能给你一
段解释:
语法: int eregi(string pattern, string string, array [regs]);
返回值: 整数/数组
本函数以 pattern 的规则来解析比对字符串 string。
比对结果返回的值放在数组参数 regs 之中,regs[0] 内容就是原字符串 string、regs[1]
为第一个合乎规则的字符串、regs[2] 就是第二个合乎规则的字符串,余类推。若省略参数
regs,则只是单纯地比对,找到则返回值为 true。
而不太好理解的就是前面的这段正则表达式了:^[_.0-z-]+@([0-z][0-z-]+.)+[a-z]{2,3}$
在这段正则表达式中,“+”表示前面的字符串连续出现一个或多个;“^”表示下一个字符串
必须出现在开头,“$”表示前一个字符串必须出现在结尾;
“.”也就是“.”,这里“”是转义符;“{2,3}”表示前面的字符串可以连续出现2-3次。“()”
表示包含的内容必须同时出现在目标对象中。“[_.0-z-]”表示包含在“_”、“.”、
“-”、从a到z范围内的字母、从0到9范围内的数字中的任意字符;
这样一来,这个正则表达式可以这样翻译:
“下面的字符必须在开头(^)”、“该字符必须包含在“_”、“.”、“-”、从a到z范围内
的字母、从0到9范围内的数字中([_.0-z-])”、“前面这个字符至少出现一次(+)”、
@、“该字符串由一个包含在从a到z范围内的一个字母、从0到9范围内的数字中的字符开头,
后面跟至少一个包含在“-”、从a到z范围内任何一个字母、从0到9范围内任何一个数字中的
字符,最后以.结束(([0-z][0-z-]+.))”、“前面这个字符至少出现一次(+)”、“从a
到z范围内的字母出现2-3次,并以它结束([a-z]{2,3}$)” 。很繁杂,正因为这样,人们才使
用正则表达式。