PHP电子邮件地址验证问题

PHP电子邮件地址验证问题,php,email-address,Php,Email Address,我想知道在输入框中输入电子邮件地址时,如何检查是否包含@符号?我正在使用PHP 这是我的php代码 if (isset($_POST['email']) && strlen($_POST['email']) <= 255) if(isset($\u POST['email'])和&strlen($\u POST['email'])) 一个更好的方法是使用这个正则表达式来判断电子邮件是否正常 \b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

我想知道在输入框中输入电子邮件地址时,如何检查是否包含
@
符号?我正在使用PHP

这是我的php代码

if (isset($_POST['email']) && strlen($_POST['email']) <= 255)
if(isset($\u POST['email'])和&strlen($\u POST['email']))
一个更好的方法是使用这个正则表达式来判断电子邮件是否正常

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b 
在preg_match()中

一个更好的方法是使用这个正则表达式来判断电子邮件是否正常

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b 

在preg_match()

中,您可能希望使用preg而不是松散的
strpos($\u POST['email'],“@”)检查此项。


您可能希望使用preg而不是松散的
strpos($\u POST['email'],“@”)检查此问题。


仅引用上的文档中的一句话。“如果您只想确定某个特定的指针是否出现在haystack中,请改用更快、内存占用更少的函数strpos()

关于strpos,我注意到的另一件事是,仅仅检查strpos的真实性是不安全的,因为如果$Pineder位于$haystack中的第0位,简单的检查就会失败。您还必须检查它的类型(至少我是这样做的)。这将打印“notfound found”


仅引用上的文档。“如果您只想确定haystack中是否出现了特定的指针,请改用更快、内存占用更少的函数strpos()

关于strpos,我注意到的另一件事是,仅仅检查strpos的真实性是不安全的,因为如果$Pineder位于$haystack中的第0位,简单的检查就会失败。您还必须检查它的类型(至少我是这样做的)。这将打印“notfound found”


可以使用一个简单的:

filter_var($email, FILTER_VALIDATE_EMAIL)
如果您绝对必须使用正则表达式,则我建议您不要使用正则表达式(这表示不应使用正则表达式验证电子邮件地址):


可以使用一个简单的:

filter_var($email, FILTER_VALIDATE_EMAIL)
如果您绝对必须使用正则表达式,则我建议您不要使用正则表达式(这表示不应使用正则表达式验证电子邮件地址):


以下是使用PHP进行电子邮件验证检查的方法:

function check_email($email) {

  // Remove trailing and leading spaces.
  $email = trim($email);

  // Must have an @ sign.
  $at = strpos($email, '@');
  if( $at === false )
    return 1; //false;
  list($mailbox, $hostname) = explode('@', $email);

  // Check that there is a mailbox and a hostname
  if( $mailbox == '' || $hostname == '' )
    return 2; //false;

  // Only one @ allowed
  if( strpos($hostname, '@') !== false )
    return 3; //false;

  // Must be a . in the hostname
  if( strpos($hostname, '.') === false )
    return 4; //false;

  // Can't have a double in either mailbox or hostname
  if( strpos($hostname, '..') !== false || strpos($mailbox, '..') !== false )
    return 5; //false;

  // Mailbox can't start or end with a .
  if( substr($mailbox, 0, 1) == '.' || substr($mailbox, strlen($mailbox)-1, 1) == '.' )
    return 6; //false;

  // Hostname can't start or end with a .
  if( substr($hostname, 0, 1) == '.' || substr($hostname, strlen($hostname)-1, 1) == '.' )
    return 7; //false;

  // Check that all characters are valid
  if( str_replace(' ' , '', strtr(strtolower($mailbox), 'abcdefghijklmnopqrstuvwxyz0123456789!#$%&\'*+-/=?^_`{|}~.', '                                                        ')) != '' )
    return 8; // false;
  if( str_replace(' ' , '', strtr(strtolower($hostname), 'abcdefghijklmnopqrstuvwxyz0123456789_-.', '                                       ')) != '' )
    return 9; //false;

return 0; //true;
}

以下是使用PHP进行电子邮件验证检查的方法:

function check_email($email) {

  // Remove trailing and leading spaces.
  $email = trim($email);

  // Must have an @ sign.
  $at = strpos($email, '@');
  if( $at === false )
    return 1; //false;
  list($mailbox, $hostname) = explode('@', $email);

  // Check that there is a mailbox and a hostname
  if( $mailbox == '' || $hostname == '' )
    return 2; //false;

  // Only one @ allowed
  if( strpos($hostname, '@') !== false )
    return 3; //false;

  // Must be a . in the hostname
  if( strpos($hostname, '.') === false )
    return 4; //false;

  // Can't have a double in either mailbox or hostname
  if( strpos($hostname, '..') !== false || strpos($mailbox, '..') !== false )
    return 5; //false;

  // Mailbox can't start or end with a .
  if( substr($mailbox, 0, 1) == '.' || substr($mailbox, strlen($mailbox)-1, 1) == '.' )
    return 6; //false;

  // Hostname can't start or end with a .
  if( substr($hostname, 0, 1) == '.' || substr($hostname, strlen($hostname)-1, 1) == '.' )
    return 7; //false;

  // Check that all characters are valid
  if( str_replace(' ' , '', strtr(strtolower($mailbox), 'abcdefghijklmnopqrstuvwxyz0123456789!#$%&\'*+-/=?^_`{|}~.', '                                                        ')) != '' )
    return 8; // false;
  if( str_replace(' ' , '', strtr(strtolower($hostname), 'abcdefghijklmnopqrstuvwxyz0123456789_-.', '                                       ')) != '' )
    return 9; //false;

return 0; //true;
}

这是我用的,非常好用

public function valid_mail($mail)
{
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $mail))
{
return false;
} else {
return true;
}
}

这是我用的,非常好用

public function valid_mail($mail)
{
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $mail))
{
return false;
} else {
return true;
}
}
此正则表达式实现:

[a-z0-9!#$%&'*+/=?^{code>{124;}-]+(?:\.[a-z0-9!#$%&'*+/=?^{code>{124;}-]+*@(?:a-z0-9?)+a-z0-9

然而,在实践中,我发现这更适合通过网页捕获电子邮件地址(或者更具体地说是ADDR-SPEC):

^[a-z0-9.\%+!$&*=^ | ~\%\'`{}/-]+@[a-z0-9.-]+.[a-z]{2,6}$

此正则表达式实现:

[a-z0-9!#$%&'*+/=?^{code>{124;}-]+(?:\.[a-z0-9!#$%&'*+/=?^{code>{124;}-]+*@(?:a-z0-9?)+a-z0-9

然而,在实践中,我发现这更适合通过网页捕获电子邮件地址(或者更具体地说是ADDR-SPEC):

^[a-z0-9.\%+!$&*=^ | ~\%\'`{}/-]+@[a-z0-9.-]+.[a-z]{2,6}$


欢迎您使用我的免费PHP函数
is_email()
来验证地址。可以下载。它不使用正则表达式,因为我找不到完全实现RFC 5321的函数

is_email()
将确保地址完全符合RFC 5321。它还可以选择检查域是否实际存在,是否有MX记录


你不应该依赖验证器来告诉你用户的电子邮件地址是否确实存在:一些ISP向其用户提供不符合要求的地址,特别是在不使用拉丁字母的国家。更多关于电子邮件验证的文章如下:。

欢迎你使用我的免费PHP函数
is_email()
验证地址。可以下载。它不使用正则表达式,因为我找不到完全实现RFC 5321的正则表达式

is_email()
将确保地址完全符合RFC 5321。它还可以选择检查域是否实际存在,是否有MX记录


你不应该依赖验证器来告诉你用户的电子邮件地址是否确实存在:一些ISP向他们的用户提供不符合要求的地址,特别是在不使用拉丁字母的国家。更多关于电子邮件验证的文章如下:。

我只想检查@是否存在。这是一个可怕的正则表达式-它拒绝它们
.museum
TLD上的AIL和那些带有
+
的。它也不匹配带有小写字母的电子邮件。类似这样的东西:
TEST@..........AA
是有效的。我只想检查@是否存在。这是一个可怕的正则表达式-它拒绝
.museum
TLD上的电子邮件以及那些在它也不匹配小写字母的电子邮件。类似这样:
TEST@..........AA
有效。仅检查@符号是否存在不是验证电子邮件地址的正确方法:)看看正则表达式是如何工作的:)@Ranhiru Cooray正则表达式不适用于所有电子邮件:)虽然很难创建一个正则表达式来管理所有邮件,但我认为创建一个健壮的正则表达式是完全可能的。不管怎么说,伊姆浩,这比仅仅检查符号@是否存在要好无数倍:)@Ranhiru-Cooray到每个人那里自己的我认为我的方式是可以的:)仅仅检查@符号是否存在不是验证电子邮件地址的正确方式:)看看@正则表达式如何工作:)@Ranhiru-Cooray正则表达式不工作对于所有电子邮件:)虽然很难创建一个正则表达式来管理它们,但我认为创建一个坚固的东西是完全可能的。不管怎么说,IMHO,这比仅仅检查符号@是否存在要好无数倍:)@Ranhiru Cooray到eachs那里有自己的我认为我的方式是可以的:)即使在解读你的帖子之后,这个模式也有一大堆错误的东西。即使在解读你的帖子之后,这个模式也有一大堆错误的东西。