Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建字符串的首字母缩略词_Php_Preg Match_Acronym - Fatal编程技术网

在PHP中创建字符串的首字母缩略词

在PHP中创建字符串的首字母缩略词,php,preg-match,acronym,Php,Preg Match,Acronym,我想根据字符串的值创建字符串的首字母缩略词。例如,如果字符串中有空格,如“Stackoverflow Community Forum”,则首字母缩略词应为“SCF”,但如果字符串中没有空格,则应取单词的前3个字母,如“Stackoverflow”,应为“STA”。 另一部分应该包括,如果字符串只有2个字符长,它应该添加一个随机字母数字字母,例如,如果字符串是“it”,它应该添加为“ITA” 这是我到目前为止所拥有的。虽然如果我去掉空格,我会在第二个if中得到SSTA 这样做的想法是,首字母缩略词

我想根据字符串的值创建字符串的首字母缩略词。例如,如果字符串中有空格,如“Stackoverflow Community Forum”,则首字母缩略词应为“SCF”,但如果字符串中没有空格,则应取单词的前3个字母,如“Stackoverflow”,应为“STA”。 另一部分应该包括,如果字符串只有2个字符长,它应该添加一个随机字母数字字母,例如,如果字符串是“it”,它应该添加为“ITA”

这是我到目前为止所拥有的。虽然如果我去掉空格,我会在第二个if中得到SSTA

这样做的想法是,首字母缩略词应该只有3个字符,并且应该在后面的示例STA001和下一个首字母缩略词SFC002等处包含递增的数字

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