我需要帮助,下面是一个有点验证电子邮件的小型非常基本的正则表达式,我确实认为它不是最好的,但是对于我的需求它现在还可以。
它目前使用PHP的 eregi函数,php.net认为它现在是折旧函数,我应该使用 preg_match 代替,简单地用preg_match替换erei不起作用,可以有人告诉我如何使它工作?
function validate_email($email) {
if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
echo 'bad email';
} else {
echo 'good email';
}
}
function validate_email($email) {
if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
echo 'bad email';
} else {
echo 'good email';
}
}
答案 0 :(得分:27)
Perl风格的正则表达式模式总是需要分隔。字符串中的第一个字符被视为分隔符,如下所示:
function validate_email($email) {
if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)) {
echo 'bad email';
} else {
echo 'good email';
}
}
您的初始尝试不起作用的原因是因为它尝试使用^
作为分隔符,但(显然)在正则表达式结尾处找不到匹配的^
。
答案 1 :(得分:10)
你需要改变三件事
i
标记。否则,其余部分看起来与PCRE兼容(是的,那是多余的= P)
"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"