【问题标题】:!preg_match for email checking!preg_match 用于电子邮件检查
【发布时间】:2012-11-15 19:09:47
【问题描述】:

我有这个命令来检查有效的电子邮件地址。我刚刚发现,当我尝试将其添加到我们的电子邮件服务器时(此表单中的所有电子邮件请求都是本地电子邮件地址),电子邮件服务器不允许数字字符开始电子邮件地址/用户名。我已阅读命令 preg_match 的所有文档,如果它在第一个字符位置以数字开头,则找不到如何使其失败。我是新手,所以任何帮助将不胜感激。

if (!preg_match("(^[-\w\.]+@([-a-z0-9]+\.)+[a-z]{2,4}$)i", $in_email))

【问题讨论】:

    标签: preg-match email-validation


    【解决方案1】:

    在 php 中,您可以将以下代码与 php filter_var 函数一起使用,该函数在使用指定的过滤条件过滤变量后返回一个布尔值。

     if(filter_var($email,FILTER_VALIDATE_EMAIL))
            { 
            //valid email
            }
            else{
            //INVALID EMAIL
            }
    

    如果电子邮件格式正确,函数 filter_var 将返回 true,否则返回 false。

    【讨论】:

      【解决方案2】:

      试试这个;

      /^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/
      

      并如下使用

      $regex = '/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
      
      if (preg_match($regex, $email)) {
          // Valid email
      } else { 
          // Invalid email
      }
      

      【讨论】:

      • 我添加了这个,它使得根本不允许使用数字。如果他们愿意,我希望使用数字 - 只是不在第一个字符位置。
      • 好的,更新了答案,如果解决了你的问题,请检查答案并接受。
      • 完美——非常感谢!这几天我一直在想办法。
      • 如果您想获得未来问题的答案,如果它可以帮助您解决问题,您应该接受正确的答案。因此,请查看答案并单击左侧的复选图标接受。
      • 这将允许以空格或@ 或任何非数字字符开头的电子邮件。
      【解决方案3】:

      如果我们有没有点的域,则此答案无效。对于这种情况,我从:

      /^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

      收件人:

      /^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]{2,})+(\.[a-z0-9-]{2,})*$/

      更新:用户@Toto 正确地看到了正则表达式的一个问题,它可以以任何字符而不是数字开头。例如:@-----.--.---.----@-- 已验证。所以我将/^[^0-9] 更改为/^[a-z] 现在是正确的:

      /^[a-z][_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]{2,})+(\.[a-z0-9-]{2,})*$/

      并为这些用例工作:

      • 用户@域
      • aa@aa
      • aa@aa.aa
      • aa.aa@aa

      【讨论】:

      • 这是匹配 @-----.--.---.----@-- 例如,不确定它是一个有效的电子邮件地址!请看看这些网站:TLD list; valid/invalid addresses; regex for RFC822 email address
      • 嘿奥塔维奥!欢迎来到 StackOverflow!看起来您已经收到了满意的答案,但如果您能够重新表述您的问题,这可能对其他人有所帮助。成千上万的人在谷歌上搜索类似的问题,并且有一个措辞清晰的问题可以帮助他们登陆这里,这样他们就可以避免你必须经历的同样的痛苦。你介意澄清一下这个问题吗?
      • @BradCypert 如果域没有点,则用户“tolga-akyüs”标记为正确的答案不起作用。例如: my@mail.com 使用来自他的正则表达式是有效的,但没有验证您是否有类似的电子邮件: my@domain 。因此,我使用了他的答案中的正则表达式,并将其更改为验证带点或不带点的域。 2021 年的今天,我们拥有没有点的域名。
      • @Toto 您的示例无法使用我的正则表达式进行验证,因为正则表达式以 /^[^0-9][_a-z0-9-]+ 开头,它准确地告诉我们: start char of字符串不是数字 [^0-9] 并且必须是 _ 或 a-z 或 0-9 在此正则表达式的部分 [_a-z0-9-]+ 中的一个或多个这样的字符。除此之外,只有一个@char 是可能的。我在 Stack 中尝试了很多解决方案,但是对于没有点的域,我尝试的所有方法都失败了。所以,我不知道我是否尝试了你在这里展示给我的所有内容。
      • here is the proof 您的正则表达式匹配(例如)@-----.--.---.----@--
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2011-11-09
      • 2010-11-16
      • 2012-02-09
      • 2012-11-29
      • 2022-06-16
      相关资源
      最近更新 更多