使用PCRE验证字符串结尾的简单电子邮件验证

时间:2011-11-30 04:25:59

标签: php

我只想尝试验证以特定字符串结尾的电子邮件。我正在使用PCRE ...但似乎无法让它工作。电子邮件需要以boisestate.edu或u.boisestate.edu结尾。我一直在刺伤这个......一些帮助真的很感激!

这是我到目前为止所做的:

if (preg_match("/[a-zA-Z]+[a-z0-9A-Z_-]+@[\.u]?\.boisestate\.edu$/", "melissa@boisestate.edu", $matches)){
echo "Match was found <br />";
print_r($matches);
}

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

if (preg_match("/[a-zA-Z]+[a-z0-9A-Z_-]+@[u\.]*boisestate\.edu$/",     "melissa@boisestate.ed", $matches)){
echo "Match was found <br />";
print_r($matches);
}

好的,这是修订版:

if (preg_match("/[a-z0-9A-Z_-]+@(?:u\.)*boisestate\.edu$/", "melissa@u.boisestate.edu", $matches)){
echo "Match was found <br />";
print_r($matches);
}

答案 1 :(得分:0)

您可以只使用filter_var和更简单的域验证正则表达式,而不是尝试将整个电子邮件匹配和域检查合并为一个。

示例:

function check_email($address) {
    if (filter_var($address, FILTER_VALIDATE_EMAIL)
            && preg_match('/@(u\.)?boisestate\.edu$/', $address)) {
        print "We have a match!\n";
    } else {
        print "Match failed!\n";
    }
}

当这样调用时:

check_email('garbage');
check_email('foo@example.com');
check_email('me@u.boisestate.edu');
check_email('you@boisestate.edu');

你会得到输出:

Match failed!
Match failed!
We have a match!
We have a match!

就正则表达式而言,你失败的原因是因为你在方括号中搜索其中一个字符,只有一次。

因此,您可以匹配foo@.boisestate.edufoo@uboisestate.edu之类的内容。如果使用括号而不是方括号,?将可选地匹配parens中的整个内容。

@(u\.)?boisestate\.edu$