Вот два прямых / общих метода, которые имеют различные преимущества:
Метод № 1 : подход без регулярных выражений
function check_email1($email){
$whitelist_domains=['@domain1.com','@domain2.com','@domain3.com'];
foreach($whitelist_domains as $domain){
if(strpos($email,$domain)!==false){
return true; // allow quick return (exit loop & function asap)
}
}
return false; // default response
}
Метод № 2: регулярное выражение
function check_email2($email){
$whitelist_pattern='/@(?:domain1\.com|domain2\.com|domain3\.com)$/'; // condense if possible /@domain[123]\.com$/
return (bool)preg_match($whitelist_pattern,$email); // convert 0 or 1 output to boolean (false/true)
}
Демонстрационная ссылка
Вход / вызов функции :
$emails=['user@domain1.com','bad@bad.com'];
foreach($emails as $email){
echo "$email\n";
var_export(check_email1($email));
echo "\n";
var_export(check_email2($email));
echo "\n\n";
}
Вывод :
user@domain1.com
true
true
bad@bad.com
false
false
Преимущества / недостатки :
strpos () в большинствеситуаций будет превосходить функции регулярных выражений.Ваш метод по умолчанию должен состоять в том, чтобы использовать строковые функции и переходить на регулярные выражения только тогда, когда строковые функции менее эффективны или слишком сложны для кодирования.Связанная страница: Что является более эффективным, строковые функции PHP или регулярное выражение в PHP?
Цикл $whitelist_domains
в # 1 делает блок кода более неприглядным по сравнениюдо # 2 (который может быть сжат до однострочного, если вы записываете шаблон непосредственно в preg_match () ).
Иногда возникают простые / распространенные ошибки, когдадело с strpos()
.Эти ошибки могут включать:
- не проверка
false
в if
условии - запись
haystack
и needle
в неправильном порядке
# 2 действительно требует некоторых знаний о регулярных выражениях (экранирование, классы символов, альтернативы и т. Д.), Которые могут быть сдерживающим фактором для неопытных программистов.В зависимости от того, как вы пишете свой шаблон регулярных выражений и сколько доменов будет занесено в белый список, обслуживание №2, вероятно, будет сложнее поддерживать, чем # 1.
# 2 обладает дополнительным преимуществом возможностичтобы убедиться, что подстрока domain.com
появляется в конце слова через метасимвол $
.По этой причине регулярное выражение предлагает более строгую проверку.