Space 在@中提及用户名并在 link 中小写
Space in @ mention username and lowercase in link
我正在尝试创建一个提及系统,到目前为止我已经在 link 中转换了@username。但我想看看它是否有可能识别名称的空格。例如:@Marie Lee
而不是 @MarieLee
.
此外,我正在尝试将 link 中的名称转换为小写字母(例如:profile?id=marielee
,同时将提到的显示保留为大写字母,但未能成功。
到目前为止,这是我的代码:
<?php
function convertHashtags($str) {
$regex = '/@+([a-zA-Z0-9_0]+)/';
$str = preg_replace($regex, strtolower('<a href="profile?id=">[=12=]</a>'), $str);
return($str);
}
$string = 'I am @Marie Lee, nice to meet you!';
$string = convertHashtags($string);
echo $string;
?>
您可以将此代码与 preg_replace_callback
和增强的正则表达式一起使用,该正则表达式将匹配所有 space 分隔的单词:
define("REGEX", '/@\w+(?:\h+\w+)*/');
function convertHashtags($str) {
return preg_replace_callback(REGEX, function ($m) {
return '<a href="profile?id=' . strtolower($m[0]) . '">[=10=]</a>';
}, $str);
}
如果你只想允许 2 个单词,那么你可以使用:
define("REGEX", '/@\w+(?:\h+\w+)?/');
您可以根据字母数字字符、数字或 space 过滤掉 usernames
,没有其他可提取的内容。确保在进行 space 之前至少匹配了一个字符,以避免空 space 与单个 @
匹配。对于后跟非单词字符(space 除外)的用户名,最多 2 个 space 正确分隔的单词有效。
<?php
function convertHashtags($str) {
$regex = '/@([a-zA-Z0-9_]+[\sa-zA-Z0-9_]*)/';
if(preg_match($regex,$str,$matches) === 1){
list($username,$name) = [$matches[0] , strtolower(str_replace(' ','',$matches[1]))];
return "<a href='profile?id=$name'>$username</a>";
}
throw new Exception('Unable to find username in the given string');
}
$string = 'I am @Marie Lee, nice to meet you!';
$string = convertHashtags($string);
echo $string;
如果您希望文本在锚标记的 innerHTML 中按原样显示,您需要更改
list($username,$name) = [$matches[0] , strtolower(str_replace(' ','',$matches[1]))];
至
list($username,$name) = [$str , strtolower(str_replace(' ','',$matches[1]))];
我正在尝试创建一个提及系统,到目前为止我已经在 link 中转换了@username。但我想看看它是否有可能识别名称的空格。例如:@Marie Lee
而不是 @MarieLee
.
此外,我正在尝试将 link 中的名称转换为小写字母(例如:profile?id=marielee
,同时将提到的显示保留为大写字母,但未能成功。
到目前为止,这是我的代码:
<?php
function convertHashtags($str) {
$regex = '/@+([a-zA-Z0-9_0]+)/';
$str = preg_replace($regex, strtolower('<a href="profile?id=">[=12=]</a>'), $str);
return($str);
}
$string = 'I am @Marie Lee, nice to meet you!';
$string = convertHashtags($string);
echo $string;
?>
您可以将此代码与 preg_replace_callback
和增强的正则表达式一起使用,该正则表达式将匹配所有 space 分隔的单词:
define("REGEX", '/@\w+(?:\h+\w+)*/');
function convertHashtags($str) {
return preg_replace_callback(REGEX, function ($m) {
return '<a href="profile?id=' . strtolower($m[0]) . '">[=10=]</a>';
}, $str);
}
如果你只想允许 2 个单词,那么你可以使用:
define("REGEX", '/@\w+(?:\h+\w+)?/');
您可以根据字母数字字符、数字或 space 过滤掉 usernames
,没有其他可提取的内容。确保在进行 space 之前至少匹配了一个字符,以避免空 space 与单个 @
匹配。对于后跟非单词字符(space 除外)的用户名,最多 2 个 space 正确分隔的单词有效。
<?php
function convertHashtags($str) {
$regex = '/@([a-zA-Z0-9_]+[\sa-zA-Z0-9_]*)/';
if(preg_match($regex,$str,$matches) === 1){
list($username,$name) = [$matches[0] , strtolower(str_replace(' ','',$matches[1]))];
return "<a href='profile?id=$name'>$username</a>";
}
throw new Exception('Unable to find username in the given string');
}
$string = 'I am @Marie Lee, nice to meet you!';
$string = convertHashtags($string);
echo $string;
如果您希望文本在锚标记的 innerHTML 中按原样显示,您需要更改
list($username,$name) = [$matches[0] , strtolower(str_replace(' ','',$matches[1]))];
至
list($username,$name) = [$str , strtolower(str_replace(' ','',$matches[1]))];