В настоящее время мы работаем над сайтом, который был разработан другой студией. Он работает на WordPress и использует плагин под названием UserPro для управления своими членами (логин, регистрация, профиль и т. д.)
Владельцы хотят, чтобы веб-сайт имел открытый доступ в целом, но некоторые части доступны только для членов. Поэтому они хотели, чтобы только пользователи с конкретными почтовыми доменами могли регистрироваться на сайте. Эта функция работает для доменов и определенных поддоменов, однако вскоре они узнали, что для поддоменов этого домена может существовать бесконечное количество возможностей. Таким образом, они должны разрешить кому-либо из любого потенциального субдомена этого почтового домена иметь право зарегистрироваться на веб-сайте.
Я приложил приведенный ниже код, чтобы вы могли увидеть, как он работает в настоящее время. Я редактировал URL-адреса для конфиденциальности владельцев, но остальная часть кода точно такая же.
case 'email_exists':
if (!is_email($input_value)) {
$output['error'] = __('Please enter a valid email.','userpro');
} else if (email_exists($input_value)) {
$output['error'] = __('Email is taken. Is that you? Try to <a href="#" data- template="login">login</a>','userpro');
}
else if($input_value){
$domain = strstr($input_value, '@');
$domains = array('@test.com' , '@test.net' , '@alpha.test.com' , '@beta.test.net', '@*.test.com', '@*.test.net');
if(!in_array($domain, $domains))
$output['error'] = __('Accounts with this email domain are not currently allowed automatic registration. You can request an account via the contact us page. ','userpro');
}
break;
Так что пробежать через это. Если у вас есть электронная почта @ test.com или @ test.net, она работает нормально. Если у вас есть электронное письмо в одном из указанных субдоменов, например, «@ alpha.test.com» или «@ beta.test.net», оно также отлично работает и позволяет зарегистрироваться.
Однако, если вы хотите подписаться на другой, например, @scar.test.com или @ delta.test.net, вы не сможете зарегистрироваться.
Я думал, что выполнение «@ *. Test.com» позволит любому возможному поддомену работать, но это явно не так. По крайней мере, не так, как я хочу.
Любая помощь по этому вопросу будет принята с благодарностью.
С Уважением,
Адам
Похоже, работа для регулярных выражений и preg_match()
,
Существует несколько способов проверки, но в зависимости от ваших текущих требований только следующие 4 опции являются действительными окончаниями отправленного адреса электронной почты.
Это можно записать в регулярном выражении как (@|\.)test\.((com)|(net))$
Таким образом, чтобы обновить свой код, вы можете заменить,
else if($input_value){
// your code here
}
с,
else if (!preg_match('~(@|\.)test\.((com)|(net))$~i', $input_value)) {
$output['error'] = __('Accounts with this email domain are not currently allowed automatic registration. You can request an account via the contact us page. ','userpro');
}
Играть с регулярным выражением здесь https://regex101.com/r/JtUxmZ/5
Других решений пока нет …