0
$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>

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

4

2 回答 2

0

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

如果您正在处理格式,那么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
于 2013-11-07T21:49:35.740 回答
0

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

$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);
}

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

于 2013-11-07T21:42:53.633 回答