从电子邮件正则表达式php删除加号

时间:2018-02-05 14:38:42

标签: php regex preg-match

我想从电子邮件中删除+符号,请帮我编写一个不接受电子邮件中的+符号的正则表达式。

abc@xyz.com - valid email
abc123@xyz.com - valid email
abc.def@xyz.com - valid email
abc+123@xyz.com - Invalid email

3 个答案:

答案 0 :(得分:3)

根据我的评论,您可以使用

^[^@+]+@\S+$
# start of line, anything not + or @ 1+ times, followed by @,
# not whitespaces and the end of the string

使用例如~作为分隔符并查看a demo on regex101.com - 问题是:为什么? +完全有效。

答案 1 :(得分:2)

正则表达式^[^@+]+@[^@]+$

[^@+]中添加不需要的字符。

详细说明:

  • ^在行的开头断言位置
  • [^]匹配列表中不存在的单个字符
  • +匹配一次且无限次
  • $断言位于行尾的位置

PHP代码

$strings=['abc@xyz.com','abc123@xyz.com','abc.def@xyz.com','abc+123@xyz.com'];

foreach($strings as $string){
    $match = preg_match('~^[^@+]+@[^@]+$~', $string);
    echo ($string . ' ' . ($match ? 'true' : 'false')."\n");
}

输出:

abc@xyz.com true
abc123@xyz.com true
abc.def@xyz.com true
abc+123@xyz.com false

答案 2 :(得分:1)

Plus符号是有效的电子邮件字符。

您标记了此php。您不应该使用正则表达式在PHP中进行电子邮件验证。您应该使用filter_var()

示例:

filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);