Запрос регулярного выражения для проверки электронной почты также включает .a c .uk в php - PullRequest
1 голос
/ 24 февраля 2020

Я искал и искал в Интернете и в Stack Overflow некоторые рекомендации, но ничто не вписывается в мой код. Я использую PHP, чтобы выполнить некоторую проверку в форме регистрации пользователей, как показано ниже, и я также хочу проверить, есть ли у подписывающего пользователя электронное письмо, которое заканчивается на .ac.uk:

  // We check for any empty inputs. 
  if (empty($firstName) || empty($lastName) || empty($username) || empty($email) || empty($password) || empty($passwordRepeat)) {
    header("Location: ../signup.php?error=emptyfields&username=".$username."&email=".$email);
    exit();
  }
  // We check for an invalid username AND invalid e-mail.
  else if (!preg_match("/^[a-zA-Z0-9]*$/", $username) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../signup.php?error=invalidunamemail");
    exit();
  }
  // Check for an invalid username. In this case ONLY letters and numbers allowed.
  else if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) {
    header("Location: ../signup.php?error=invalidcharacters");
    exit();
  }

  // Check for minimum amount of characters in username.
  else if (strlen($username) <7 ) {
    header("Location: ../signup.php?error=invalidlengthuname");
    exit();
  }

  // Check for an invalid e-mail. <-- Here is where I also want to add the check of .ac.uk at the end of the email
  else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../signup.php?error=invalidemail");
    exit();
  }
  // Check if the repeated password is NOT the same.
  else if ($password !== $passwordRepeat) {
    header("Location: ../signup.php?error=passwordcheck&uname");
    exit();
  }
  else {
// Login

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Регулярное выражение для электронной почты, соответствующее регулярному выражению Regex c домен

^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(yourdomain)\.ac.uk$

Демо

Вот Дополнительные примеры

ОБНОВЛЕНИЕ : в вашем комментарии сначала проверьте наличие расширений, если это допустимый домен, затем подтвердите.

$email = 'test@domain.ac.uk';
$extention = pathinfo($email, PATHINFO_EXTENSION);
if($extension == ".ac.uk"){
   //Do your validation here 
   filter_var($email, FILTER_VALIDATE_EMAIL));
}else{
   //Invalid extention Reject email
}
1 голос
/ 24 февраля 2020

Вы можете добавить preg_match для проверки, хотя это может пропустить второе условие, если условие одно работает. Это странно, но если добавить отдельно, это работает

  // Check for an invalid e-mail. <-- Here is where I also want to add the check of .ac.uk at the end of the email
  if ( !filter_var($email, FILTER_VALIDATE_EMAIL)  &&  preg_match('/ac.uk$/', $email) ) {

      header("Location: ../signup.php?error=invalidemail");
      exit();
  } 

Этот будет работать

  // Check for an invalid e-mail. <-- Here is where I also want to add the check of .ac.uk at the end of the email
  if ( !filter_var($email, FILTER_VALIDATE_EMAIL)) {

      header("Location: ../signup.php?error=invalidemail");
      exit();
  } 
  if (!preg_match('/ac.uk$/', $email)) { 

      header("Location: ../signup.php?error=invalidemail");
      exit();

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...