幼儿园英语儿歌hello:EMAIL校验 正则 讨论 求解

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 00:20:51
为了找实习开始学习PHP,因为学过C和PERL,所以练习了一个hello world后就开始伴随着google用PHP做网页了,现在做个
几个网站后,发现自己还没有系统得学习过PHP,于是找了本书开始从头细致地学习。昨天看到正则,想和大家讨论一下。
校验是正则用得最多的地方,这是我一年前写的EMAIL有效性校验代码:(见笑了,那时候是只知道正则的基本)
function IsMailValid  ( $mail ){
$model = "(^[a-z])((([a-z0-9])*(\.|-|_)?){0,})@(([_a-z0-9-]{2,})\.){1,}([a-z]{2,4}$)";
if (eregi($model, $mail)) {
echo "[$mail]  valide
";
return true;
}
else{
echo "[$mail]  invalide
";
return false;
}
}
复制代码
当时觉得能用就可以了,现在看来太低级,就想按照书里的提示修正一下。
书里是这样写的:^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$
我能看懂这个正则,校验的不是很好,但是比较简明,我就想吸收过来改进我的代码.
首先试验了一下,却发现有warning,结果也不对.
研究了一下,发现是因为在方括号里写了"\-"的关系,难道在方括号里"-"可以不用"\"?
如果去掉,代码可以用,但是EMAIL里就不能用"-".
于是把"-"前的"\"去掉,正则是这样
$model = "^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$";
还是有warning,结果也错误.但是改成这样
$model = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$";
结果就完全正确了.
发现差别了么?就是把-放到方括号的最后,然后又进行了几个试验,一下几种正则都正确.
[a-zA-Z0-9_.-]+
[a-zA-Z0-9._-]+
[._a-zA-Z0-9-]+
[a-zA-Z0-9.-_]+        这个正确,但是a这个 [._a-zA-Z0-9\-]+ 也正确,但是a\b@google.com也被校验为正确.
看来-放前放后还有讲究呢
到此,第一步完毕,得到的经验:
正则中方括号里-不用加\,但是要放到最后,在圆括号中.加\不加\效果一样,但是在方括号里不能加\