在PHP中创建字符串的首字母缩略词
我想根据字符串的值创建字符串的首字母缩略词。例如,如果字符串中有空格,如“Stackoverflow Community Forum”,则首字母缩略词应为“SCF”,但如果字符串中没有空格,则应取单词的前3个字母,如“Stackoverflow”,应为“STA”。 另一部分应该包括,如果字符串只有2个字符长,它应该添加一个随机字母数字字母,例如,如果字符串是“it”,它应该添加为“ITA” 这是我到目前为止所拥有的。虽然如果我去掉空格,我会在第二个if中得到SSTA 这样做的想法是,首字母缩略词应该只有3个字符,并且应该在后面的示例STA001和下一个首字母缩略词SFC002等处包含递增的数字在PHP中创建字符串的首字母缩略词,php,preg-match,acronym,Php,Preg Match,Acronym,我想根据字符串的值创建字符串的首字母缩略词。例如,如果字符串中有空格,如“Stackoverflow Community Forum”,则首字母缩略词应为“SCF”,但如果字符串中没有空格,则应取单词的前3个字母,如“Stackoverflow”,应为“STA”。 另一部分应该包括,如果字符串只有2个字符长,它应该添加一个随机字母数字字母,例如,如果字符串是“it”,它应该添加为“ITA” 这是我到目前为止所拥有的。虽然如果我去掉空格,我会在第二个if中得到SSTA 这样做的想法是,首字母缩略词
$s = 'Stackoverflow Community Forum';
if(preg_match_all('/\b(\w)/',strtoupper($s),$m)) {
$v = implode('',$m[1]);
echo $v;
}
if(!preg_match_all('/^\S.*\s.*\S$/',$s))
{
$v = strtoupper(substr($s,0,3));
echo $v;
}
我将感谢任何帮助。谢谢此代码首先使用相同的正则表达式来匹配每个单词的第一个字符,但随后会进行检查,只找到1个值。如果只有1个值,则使用整个字符串的前3个字符,否则只内爆匹配的字母 然后循环,直到字符串长度为3个字符,每次添加一个随机字符(这允许1个字符字符串)
//测试值
$s=‘Stackoverflow社区论坛’;
$s=‘Stackoverflow社区’;
$s=‘堆栈溢出’;
$s=‘IT’;
$s='I';
$s=标准上限($s);
如果(preg_match_all('/\b(\w)/',$s,$m)){
如果(计数($m[1])==1){
$v=substr($s,0,3);
}
否则{
$v=内爆(“”,$m[1]);
}
}
否则{
$v='';
}
//垫到3个字符长。
而(斯特伦($v)<3){
$v.=chr(ord(“A”)+兰特(0,25));
}
echo$v;
使用preg\u是否符合限制?如果不是的话,有很多更简单的方法,一点也不。我刚从研究中试过preg_match。但是我愿意接受任何这样做的方法。Stackoverflow社区
会提供什么?这非常有效。非常感谢@NigelRen。我要为每一个实现一个递增的唯一值,如何基于以前的值实现它?比如SCF001是第一个,SCF002是第二个?如果你有类似于$v='SCF001'的东西
,则$v++
将为您提供SCF002
。我理解,尽管当我像$n=“001”这样指定它时;对于($n=0;$n您需要在执行增量之前将001
添加到字符串中。我也这样做了,它将001视为字符串的一部分,并完全更改首字母缩略词,但仍然忽略00
// Test Values
$s = 'Stackoverflow Community Forum';
$s = 'Stackoverflow Community';
$s = 'Stackoverflow';
$s = 'IT';
$s = 'I';
$s =strtoupper($s);
if(preg_match_all('/\b(\w)/', $s,$m)) {
if ( count($m[1]) === 1 ) {
$v = substr($s,0,3);
}
else {
$v = implode('',$m[1]);
}
}
else {
$v = '';
}
// Pad to 3 chars long.
while ( strlen($v) < 3 ) {
$v .= chr( ord("A") + rand(0,25) );
}
echo $v;