php preg_match与电子邮件验证问题

Om3*_*3ga 7 php

我正在使用带preg_match功能的php验证电子邮件地址.但我不断收到以下错误

preg_match(): No ending delimiter '^' found
Run Code Online (Sandbox Code Playgroud)

这是我的preg_match模式

$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Sho*_*hoe 18

只需使用:

$pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i";
Run Code Online (Sandbox Code Playgroud)

  • 这并不完全有效,因为您可以向 Martin.Kudlacek@example.com 发送电子邮件,并且您的模式会说此地址无效。刚好与 MS Exchange 结合使用,它创建了这样的电子邮件地址。 (2认同)

And*_*ler 9

也许用

filter_var($email, FILTER_VALIDATE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

将是一个更容易的方法.

  • 在带有 [IDN 域](https://en.wikipedia.org/wiki/International_email) 的电子邮件上使用 filter_var 时要小心!例如,此类工作电子邮件:путин@президент.рф 或 user@example.ad 将被视为不正确。您将需要 idn_to_ascii() 函数。 (2认同)

man*_*706 7

使用此代码

<?php
 $email = "asd/sdff@asdf.com"; 
 $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
 $email = (preg_match($regex, $email))?$email:"invalid email";
?>
Run Code Online (Sandbox Code Playgroud)