Whay 我不能将此名称转换为带有缩写名字的电子邮件链接


Whay can't I convert this name into an email link with the first name abbreviated?

$name = 'billy, jole';
if (preg_match('/^[a-zA-Z,]+ ([a-zA-Z]+)/',$name ,$yes)){
          print preg_replace('/(^[a-zA-Z,]+), ([a-zA-Z])+/','<a href="mailto:$1@ccsf.edu"></a>', $name);
}

输出为:

<a href="mailto:billy@ccsf.edu"></a>

但是我需要缩写为 jbilly 的名字,所以输出看起来像这样:

<a href="mailto:jbilly@ccsf.edu"></a>

有人可以帮我吗?我是正则表达式的新手?

单独捕获第一个字母。 注意你把括号放在哪里;看起来你把它们扔得有点随意。

$name = 'billy, jole';
if (preg_match('/^[a-z]+, [a-z]+/i', $name, $yes)) {
    print preg_replace('/^([a-z]+), ([a-z])[a-z]*/i', '<a href="mailto:$2$1@ccsf.edu"></a>', $name);
}

当然,正如所指出的,这将在许多名称和名称格式上失败,并且很少有组织在遇到冲突或边缘情况之前真正设法使用第一个字母姓氏很长时间。

有一个问题,我试图用正则表达式来解决。现在我有两个问题。

如果您正在处理格式lastname, firstname则正则表达式将在名称的情况下中断 van O'Toole, Sëamus .你可以写一个真正可怕的正则表达式,或者你可以直接拆分逗号并修剪空格。

$name = "van O'Toole, Sëamus"
list($lname, $fname) = array_map('trim', explode(',', $name));

然后,要创建电子邮件地址:

// convert to lowercase, strip special chars.
$fname = preg_replace('/[^'w]/', strtolower($fname));
$fname = preg_replace('/[^'w]/', strtolower($lname));
$email = sprintf("%s%s@domain.com", substr($fname,0,1), $lname);
//result: svanotoole@domain.com