使用PHP检查电子邮件

时间:2012-04-15 09:29:03

标签: php email

我正在使用这个简单的代码:

$raw = 'text hi@li.com text';
$raw = preg_replace('<[\w.]+@[\w.]+>', '***@$2', $raw);

我应该得到输出,如***@li.com;我得到***@

我无法调试它,我不知道怎么回事。


所以解决方案是

preg_replace('<([\w.]+)@([\w.]+)>', '***@$2', $raw);

我必须添加()才能组成一个组。

5 个答案:

答案 0 :(得分:3)

$raw = ' hi@li.com ';
$raw = preg_replace('/[^@]+@(.+)/', '***@$1', $raw);

答案 1 :(得分:3)

你需要通过添加()创建一个组,而BTW它将是$ 1:

$raw = ' hi@li.com ';
$raw = preg_replace('/[^@]+@([^\s]+)/', '***@$1', $raw);

还修改了。+ tp [^ \ s] +所以它“只吃”了电子邮件而不是之后的文字

答案 2 :(得分:1)

这里没有正则表达式:

$raw = 'hi@li.com';
$raw = explode('@', $raw);
array_shift($raw);
$raw = '***@'.implode('', $raw);

答案 3 :(得分:0)

正则表达式对此任务有点过分。使用explode()函数和一点字符串连接就足够了。

$pieces = explode('@', $raw);
$raw = '***@' . $raw[count($raw) - 1];

请注意,我访问$raw中存储的电子邮件地址的域部分的方式。我没有使用$raw[1],因为@字符实际上可以用作电子邮件地址(如果它被引号括起来),尽管它实际上有点不寻常。您可以在此处查看更多电子邮件地址示例:http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses

答案 4 :(得分:0)

您也可以使用strstr()功能。同样使用真正的参数,您可以在针前获取部件并计算长度并使用星号填充。

<?php
$email  = 'name@example.com';

$len = strlen(strstr($email, '@', true));
$domain = strstr($email, '@');

echo str_repeat('*',$len).$domain; // prints ****@example.com
?>