PHP:需要使用[a-zA-Z0-9]进行解释

时间:2012-07-20 08:40:18

标签: php regex pcre

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

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

6 个答案:

答案 0 :(得分:9)

既然你刚接触php,我建议你应该买一本书或者读一两本教程。

对于电子邮件验证,您应该使用filter_var构建与PHP 5.2及更高版本一起提供的功能:

<?php
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL)){
    echo("E-mail is not valid");
}else{
   echo("E-mail is valid");
}
?> 

答案 1 :(得分:4)

您可以使用其他功能..而不是正则表达式

if(filter_var($email,FILTER_VALIDATE_EMAIL)){
 echo "Valid email";
}else{
 echo "Not a valid email";
}

答案 2 :(得分:2)

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

if(preg_match("[a-zA-Z0-9]@[a-zA-Z0-9]",$email)
{
    // Your stuff
}

答案 3 :(得分:2)

看起来您正在尝试验证电子邮件地址是否与某种模式匹配。但是你没有使用正确的功能。您可能想要preg_match( $pattern, $target )

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

考虑一下:

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

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

mailparse_rfc822_parse_addresses功能在检测和匹配电子邮件地址时更加可靠。

答案 4 :(得分: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.
}

答案 5 :(得分: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;
}