Как проверить школьный домен электронной почты с помощью php

avatar
bola Oyetade
8 августа 2021 в 16:06
90
2
-1

Я пытаюсь проверить адрес электронной почты школы, оканчивающийся на .ac.uk, в php. Я хочу иметь возможность проверить, закончилось ли электронное письмо, отправленное в форме, на .ac.uk в PHP

.

Мой код PHP:

if (empty ($_POST["uni_email"])) {
$emailErr2 = "University email is required";
} else {
  $uemail = $_POST["uni_email"];
  if ( !filter_var($uemail, FILTER_VALIDATE_EMAIL)) {
   $emailErr3 = "Invalid email format";
   echo $emailErr3;
    
}
if (!preg_match('/ac.uk$/', $email)) {

  $emailErr3 = "Invalid university email format";
  echo $emailErr3;

}

Я видел способы использования функции checkdnsrr() для проверки домена, но я не уверен, что это правильный способ, поскольку .ac.uk не является доменом, и я хочу убедиться, что он проверяет домен . ac.uk после домена. Таким образом, допустимым адресом электронной почты будет bob@email.ac.uk.

.
Источник

Ответы (2)

avatar
sikurro
8 августа 2021 в 16:28
0

может быть что-то вроде этого

демо: http://codepad.org/7PsanZIO

<?php 
$postEmail = 'user@university.ac.uk'; // as $_POST["uni_email"]
if (empty ($postEmail)) {
    $emailErr2 = "University email is required";
} else {
    $uemail = $postEmail;
    if ( !filter_var($uemail, FILTER_VALIDATE_EMAIL)) {
    $emailErr3 = "Invalid email format";
     echo $emailErr3;
    }
}

if (substr(trim($postEmail), -6) === '.ac.uk') {
  echo 'email is correct';
} else {
  $emailErr3 = "Invalid university email format";
  echo $emailErr3;
}
?>
sikurro
8 августа 2021 в 16:41
0

есть улучшение в разделе проверки substr(trim($postEmail), -6) === '.ac.uk'

bola Oyetade
8 августа 2021 в 16:49
0

решение имеет результат электронной почты, правильный каждый раз, независимо от электронной почты, возможно, проверьте, что происходит, когда ввод неверен

sikurro
8 августа 2021 в 17:08
1

Я только что обновил его, вы можете проверить его сейчас codepad.org/7PsanZIO

avatar
LambdaTheDev
8 августа 2021 в 16:21
1

Вместо этого последнего preg_match вы можете сделать это без регулярного выражения:

if(!endsWith($email, '.ac.uk'))
{
   // here handle your error, email doesn't end with .ac.uk.
   $emailErr3 = "Invalid university email format";
   echo $emailErr3;
}

function endsWith( $haystack, $needle ) {
    $length = strlen( $needle );
    if( !$length ) {
        return true;
    }
    return substr( $haystack, -$length ) === $needle;
}
bola Oyetade
8 августа 2021 в 16:30
0

не могли бы вы объяснить функцию endWith(), пожалуйста

LambdaTheDev
9 августа 2021 в 08:50
1

Этот метод получает последние символы $length из входной строки и сравнивает их с $needle (в данном случае .ac.uk). Если $length ложно (в этом примере это означает, что длина строки == 0, то возвращается true (каждая строка заканчивается ничем).