3

我是 PHP 新手(不是整体编程),并且对这行简单的代码有问题。我想检查某些输入字段是否已填写为 anysymbolornumber@anysymbolornumber 只是为了检查是否输入了正确的电子邮件。我没有收到任何错误,但整个检查系统不起作用。这是我的代码,谢谢!

  if ($email = "[a-zA-Z0-9]@[a-zA-Z0-9]")
{
4

6 回答 6

9

由于您是 php 新手,我建议您应该购买一本书或阅读一两个教程。

对于电子邮件验证,您应该使用 php 5.2 及更高版本附带的 filter_var 内置函数:

<?php
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL)){
    echo("E-mail is not valid");
}else{
   echo("E-mail is valid");
}
?> 
于 2012-07-20T08:45:23.767 回答
4

你可以使用其他函数..而不是正则表达式

if(filter_var($email,FILTER_VALIDATE_EMAIL)){
 echo "Valid email";
}else{
 echo "Not a valid email";
}
于 2012-07-20T08:44:44.203 回答
2

正如评论中正确指出的那样,您使用的正则表达式实际上并不是验证电子邮件的好方法。有很多更好的方法,但如果您只是想了解正则表达式的工作原理,这是一个起点。我不是正则表达式方面的专家,但这至少会让你的 if 语句起作用:)

if(preg_match("[a-zA-Z0-9]@[a-zA-Z0-9]",$email)
{
    // Your stuff
}
于 2012-07-20T08:42:58.993 回答
2

您似乎正在尝试验证电子邮件地址是否与特定模式匹配。但是您没有使用正确的功能。您可能想要类似preg_match( $pattern, $target ).

此外,你的正则表达式并没有做你想做的事。特别是,您需要一些量词,否则您的电子邮件地址将只能由 前面的一个字符@和后面的一个字符组成。而且您需要在序列的开头和结尾使用锚点,以便您匹配整个地址,而不仅仅是最接近@.

考虑一下:

if( preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+$", $email ) ) {
    // Whatever
}

但是请记住,这实际上是一种穷人验证电子邮件地址的方法。电子邮件地址可以包含比我提供的字符类中列出的字符多得多的字符。此外,还可以构造具有相同字符类别的无效电子邮件地址。它甚至还没有开始处理 Unicode。使用正则表达式验证电子邮件地址非常困难。Friedl 在 Mastering Regular Expressions (O'Reilly) 中对此进行了尝试,他的努力采用了 2KB 的正则表达式模式。充其量,这只是一个基本的健全性检查。这不是验证电子邮件地址的安全方法。在最坏的情况下,它实际上错过了有效的正则表达式,并且仍然匹配无效的正则表达式。

mailparse_rfc822_parse_addresses功能,在检测和匹配电子邮件地址方面更可靠。

于 2012-07-20T08:50:19.363 回答
0

您需要使用 preg_match 来运行正则表达式。

现在您将 $email = 设置为正则表达式。

它可能看起来像:

if ( preg_match("[a-zA-Z0-9]@[a-zA-Z0-9]", $email ))

在匹配时还要记住,如果您必须使用==运算符。

我相信最好的做法是使用 filter_var 代替:

if( ! filter_var( $email , FILTER_VALIDATE_EMAIL )) {
 // Failed.
}
于 2012-07-20T08:44:17.937 回答
0

另一种方式取自:http ://www.linuxjournal.com/article/9585

function check_email_address($email) {
  // First, we check that there's one @ symbol, 
  // and that the lengths are right.
  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    // Email invalid because wrong number of characters 
    // in one section or wrong number of @ symbols.
    return false;
  }
  // Split it into sections to make life easier
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&
↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
$local_array[$i])) {
      return false;
    }
  }
  // Check if domain is IP. If not, 
  // it should be valid domain name
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
        return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|
↪([A-Za-z0-9]+))$",
$domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}
于 2012-07-20T08:44:35.997 回答