我只想尝试验证以特定字符串结尾的电子邮件。我正在使用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);
}
答案 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.edu
和foo@uboisestate.edu
之类的内容。如果使用括号而不是方括号,?
将可选地匹配parens中的整个内容。
@(u\.)?boisestate\.edu$