如何在preg_replace中大写$ 2?

时间:2012-11-28 04:55:17

标签: tags preg-match

我为我的哇公会运行了一个社区网站(使用html,css和php手工构建)。最近,我的成员要求能够在帖子中使用像@username这样的标签,然后链接到用户页面。我已经有了这个脚本,如下所示:

<?php

$string = '@user really?';

if (preg_match('/(^|\s)@([a-z0-9_]+)/i', $string))
{

$string = preg_replace('/(^|\s)@([a-z0-9_]+)/i', '<a href="user/$2">@$2</a>', $string);

echo $string;
}
else {

echo $string;

}

?>

这很好用,我注意到$ 2是用户的名字,但是,因为所有用户的名字都以大写字母开头,所以$ 2需要大写,而不是每个人都这样做。有没有办法对它进行编码以自动将2美元资本化,或者我应该告诉用户记住大写吗?

Thanx提前, 史蒂芬

2 个答案:

答案 0 :(得分:0)

使用ucfirst($ 2)来大写第一个字符 和strtoupper($ 2)如果你想要它全部资本

答案 1 :(得分:0)

我添加了更多的preg_replace,它现在链接到用户,无论你的类型名称如何,只要你有@符号(@ user,@ USER,@ User,@ SUER等等)。对于需要我的解决方案的任何人,我将在下面发布:

<?php

$proper_str = "going to battle with @ADROK";

$proper_str = ucfirst(strtolower($proper_str));

$proper_str = preg_replace('/@[a-z]/e', 'ucfirst(strtoupper("$0"))', $proper_str);

$proper_str = preg_replace('/(^|\s)@([a-z0-9_]+)/i', ' <a href="user/$2">@$2</a>', $proper_str);

echo $proper_str;

?>

如果你改变了一些事情并且做到了:

<?php

$proper_str = "going to battle with e@mail.com";

if (preg_match('/(^|\s)@([a-z0-9_]+)/i', $proper_str))

{

$proper_str = ucfirst(strtolower($proper_str));

$proper_str = preg_replace('/@[a-z]/e', 'ucfirst(strtoupper("$0"))', $proper_str);

$proper_str = preg_replace('/(^|\s)@([a-z0-9_]+)/i', ' <a href="user/$2">@$2</a>', $proper_str);

echo $proper_str;

} else {

$proper_str = ucfirst("$proper_str");

echo $proper_str;

}

?>

然后它会单独留下电子邮件地址,并确保首字母大写!