在php preg_match()中强制使用特殊字符(@)

在php preg_match()中强制使用特殊字符(@),php,preg-match,Php,Preg Match,我正在尝试在邮件()中为密件抄送创建预匹配()。 我已经创建了以下preg_match() if(空($mail\u bcc)) { $\会话['error']。=“请输入密件抄送电子邮件id.”; $error=1; } 如果(!preg_)匹配('/^\s*[A-Za-z0-9@.,]+\s*$/',$mail_bcc)| | preg_match('/^/',$mail_bcc)| | | preg_match('/$/',$mail_bcc)) { $\u SESSION['error'

我正在尝试在邮件()中为密件抄送创建预匹配()。 我已经创建了以下preg_match()

if(空($mail\u bcc))
{
$\会话['error']。=“
  • 请输入密件抄送电子邮件id.
  • ”; $error=1; } 如果(!preg_)匹配('/^\s*[A-Za-z0-9@.,]+\s*$/',$mail_bcc)| | preg_match('/^/',$mail_bcc)| | | preg_match('/$/',$mail_bcc)) { $\u SESSION['error']。=“
  • 请输入有效的密件抄送电子邮件id。不允许使用空格,并用逗号(,)分隔密件抄送电子邮件地址。
  • ”; $error=1; }
    对于这一点,我得到的结果如下

  • abc.gmail.com=TRUE
  • abc.gmail.com,abc.gmail.com=TRUE
  • abc@gmail.com==真
  • 但我想把@定为强制性的。 对于以下情况,它应返回False/Error

  • abc.gmail.com=错误
  • abc.gmail.com,abc.gmail.com假

  • 要在像您这样的正则表达式中至少需要一个
    @
    ,最简单的方法是使用
    (?=[^@]*@)
    正向前瞻:

    '/^(?=[^@]*@)\s*[A-Za-z0-9@. ,]+\s*$/'
       ^^^^^^^^^^
    

    (?=[^@]*@)
    构造将开始查找除
    @
    [^@]*
    )之外的任何0+字符,直到字符串开头(
    ^
    )的第一个
    @
    )。如果它找到一个
    @
    ,将搜索消费模式的其余部分,否则,正则表达式引擎将立即使匹配失败。

    尝试
    '/^(?=[^@]*@)\s*[a-Za-z0-9@.,]+\s*$/'
    @jashhandrews您想验证电子邮件地址还是做其他事情?@WiktorStribiżew:成功了。@WiktorStribiżew:您能帮我一下吗。这是初学者学习正则表达式的最佳站点。我只是讨厌他们。我的正则表达式从来没有给我正确的结果。有很多。不过,要真正学到一些东西,你需要练习。实践的最佳方式是通过解决实际问题。基础知识可以在学习,其余的可以在这里掌握,等等。订阅regex标签,或者在搜索框中使用
    [regex][php]
    标签搜索站点。用于测试与PCRE兼容的表达式(该网站还自动提供对模式的详细解释)。net也是一个很好的资源。
    '/^(?=[^@]*@)\s*[A-Za-z0-9@. ,]+\s*$/'
       ^^^^^^^^^^