Используйте шаблон для проверки адресов электронной почты - PullRequest
0 голосов
/ 06 декабря 2018

Вы бы использовали что-то вроде:

<input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">

Так что если вы хотите разрешить использовать только домен и поддомен в теории, вы бы использовали;

<input type="email" name="email" pattern="[a-z0-9._%+-]+@[example]+\.[com]{2,}/@[subdomain]+\.[example].\[com]$">

Я только хочуразрешать ответы по электронной почте от example.com и subdomain.example.com ИЛИ разрешать только ответы по электронной почте, заканчивающиеся на .co.uk, что является наиболее идеальным.

Любая помощь приветствуется.

UPDATE

Использование;

pattern="[a-zA-Z0-9-]+@sub.example.co.uk" означает, что проверка будет работать.

Но использование:

pattern="[a-zA-Z0-9-]+@sub.example.co.uk|+@example.co.uk" означает, что проверка будет работать, но также позволяет использовать такие домены, как@gmail.com и т. Д.

UPDATE

Вот код для формы.

<form action="./login.php" method="post">
<input type="email" id="email" minlength="13" maxlength="29" pattern="[a-zA-Z0-9-]+@subdomain@example.co.uk|+@example.co.uk" style="text-transform: lowercase" placeholder="Enter your email address." name="email" required=""><br>
<input type="submit">
</form>

В идеале я мог бы установить список разрешенных доменов и определенных адресов электронной почты, чтобы только jon@example.co.uk, igor@example.co.uk и stephen@example.co.uk могли отправлять.Можете ли вы сопоставить начало письма в виде массива или всего этого в формате $allowedaddresses, чтобы сохранить разрыв @ из домена.

1 Ответ

0 голосов
/ 06 декабря 2018
  1. Не пытайтесь писать регулярные выражения для проверки адресов электронной почты, потому что практически невозможно .Стандартные управляющие адреса электронной почты были очень слабо определены, и исторически люди шли с ним разными путями.
  2. Не пытайтесь упаковать слишком много логики приложения в регулярное выражение.

Поскольку вы пытаетесь сопоставить только доменное имя, которое, как правило, является единственно надежной частью адреса электронной почты, вы можете просто сопоставить конец строки с регулярным выражением.

$allowed_domains = [
    '.co.uk',
    'bar.co.uk'
];

$forbidden_domains = [
    'baz.bar.co.uk'    
];

// make it a bit easier to manage the lists of allowed/forbidden domains
function domain_suffix_to_regex($suffix) {
    return sprintf('/.*%s$/', preg_quote($suffix));
}
$allowed = array_map('domain_suffix_to_regex', $allowed_domains);
$forbidden = array_map('domain_suffix_to_regex', $forbidden_domains);

$emails = [
    'example@foo.bar.co.uk',
    'example@bar.co.uk',
    'example@baz.bar.co.uk'
];

foreach($emails as $email) {
    $permitted = false;
    foreach($allowed as $expr) {
        if( preg_match($expr, $email) ) {
            $permitted = true;
            echo "$email allowed by expr: $expr\n";
            break;
        }
    }
    if( $permitted ) {
        foreach($forbidden as $expr) {
           if( preg_match($expr, $email) ) {
                $permitted = false;
                echo "$email forbidden by expr: $expr\n";
                break;
           }
        }
    }
    var_dump($permitted);
}

Вывод:

example@foo.bar.co.uk allowed by expr: /.*\.co\.uk$/
bool(true)
example@bar.co.uk allowed by expr: /.*\.co\.uk$/
bool(true)
example@baz.bar.co.uk allowed by expr: /.*\.co\.uk$/
example@baz.bar.co.uk forbidden by expr: /.*baz\.bar\.co\.uk$/
bool(false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...