Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Javascript 使用JS获取姓名首字母_Javascript_Jquery - Fatal编程技术网

Javascript 使用JS获取姓名首字母

Javascript 使用JS获取姓名首字母,javascript,jquery,Javascript,Jquery,我想从字符串中提取首字母,如: Name=FirstName LastName 首字母=FL 我可以用这个得到上面的结果 const首字母=项目 .名字 .查拉特(0) .toUpperCase()+ 项目 .姓 .查拉特(0) .toUpperCase(); 但是现在我的要求被改变了,好像名字只包含1个单词或者2个以上,所以在下面的情况下,我如何根据我的要求得到首字母 FullName=FU FirstName MiddleName LastName=FL 1stName 2dname 3

我想从字符串中提取首字母,如:

Name=FirstName LastName
首字母=FL
我可以用这个得到上面的结果

const首字母=项目
.名字
.查拉特(0)
.toUpperCase()+
项目
.姓
.查拉特(0)
.toUpperCase();
但是现在我的要求被改变了,好像名字只包含1个单词或者2个以上,所以在下面的情况下,我如何根据我的要求得到首字母

FullName=FU
FirstName MiddleName LastName=FL
1stName 2dname 3rdName 4thName 5thName=15
如何从JS中的字符串中获取上述首字母?


现在我只有
项。Name
字符串作为输入

您可以为此执行一个函数:

var name = 'Name';

function getInitials( name,delimeter ) {

    if( name ) {

        var array = name.split( delimeter );

        switch ( array.length ) {

            case 1:
                return array[0].charAt(0).toUpperCase();
                break;
            default:
                return array[0].charAt(0).toUpperCase() + array[ array.length -1 ].charAt(0).toUpperCase();
        }

    }

    return false;

}

Fiddle:

检查下面的
getInitials
函数:

var getInitials=函数(字符串){
变量名称=string.split(“”),
缩写=名称[0]。子字符串(0,1)。toUpperCase();
如果(names.length>1){
缩写+=名称[names.length-1]。子字符串(0,1).toUpperCase();
}
返回首字母;
};
log(getInitials('FirstName-LastName');
log(getInitials('FirstName-MiddleName-LastName');
log(getInitials('1stName 2ndName 3rdName 4thName 5thName')为什么不喜欢正则表达式

更新为支持unicode字符并使用ES6功能

let name='ch Foo Bar 1Name tooÉLong';
设rgx=newregexp(/(\p{L}{1})\p{L}+/,'gu');
让首字母=[…name.matchAll(rgx)]| |[];
首字母=(
(缩写为.shift()?[1]| |“”)+(缩写为.pop()?[1]| |“”)
).toUpperCase();

console.log(缩写)使用地图功能更容易:

var name = "First Last";
var initials = Array.prototype.map.call(name.split(" "), function(x){ return x.substring(0,1).toUpperCase();}).join('');

你可以用这个简写

"FirstName LastName".split(" ").map((n)=>n[0]).join(".");
要仅获取名字和姓氏,可以使用此速记功能

(fullname=>fullname.map((n, i)=>(i==0||i==fullname.length-1)&&n[0]).filter(n=>n).join(""))
("FirstName MiddleName OtherName LastName".split(" "));

您可以使用以下一行逻辑:

"FirstName MiddleName LastName".split(" ").map((n,i,a)=> i === 0 || i+1 === a.length ? n[0] : null).join("");

刚刚更新了Andrea的版本:

var getInitials = function (string) {
   var initials = "";
   var names = string.split(' ');
   for (n = 0; n < names.length; n++) {
        initials += names[n].substring(0, 1).toUpperCase();
    }
    return initials;
};
var getInitials=函数(字符串){
var缩写=”;
变量名称=string.split(“”);
对于(n=0;n

如果字符串包含LastName,只需将names.length更改为names.length-1忽略LastName

您可以这样做

  const getInitials = name => {
    let initials = '';
    name.split(' ').map( subName => initials = initials + subName[0]);
    return initials;
  };
    function initials(name){

      //splits words to array
      var nameArray = name.split(" ");

      var initials = '';

      //if it's a single word, return 1st and 2nd character
      if(nameArray.length === 1) {
        return nameArray[0].charAt(0) + "" +nameArray[0].charAt(1);
      }else{
         initials = nameArray[0].charAt(0);
      }
      //else it's more than one, concat the initials in a loop
      //we've gotten the first word, get the initial of the last word


      //first word
      for (i = (nameArray.length - 1); i < nameArray.length; i++){
        initials += nameArray[i].charAt(0);
      }
     //return capitalized initials
     return initials.toUpperCase();
   }
我希望这能有所帮助。

const getInitials=name=>name
.替换(/[^A-Za-z0-9À-ÿ]/ig',)//同时处理重音字符
.replace(+/+/ig,)//将多个空格替换为一个空格
.split(//)//将名称拆分为多个部分
.reduce((acc,item)=>acc+item[0],“”)//从零件中组装一个缩写
.concat(name.substr(1))//如果名称仅由一部分组成怎么办
.concat(name)//如果名称只有一个字符怎么办
.substr(0,2)//获取首字母缩写的前两个字符
.toUpperCase();//大写,但也可以使用CSS格式化
log(getInitials('A'));
log(getInitials('Abcd');
log(getInitials('Abcd-Efgh');
log(getInitials('Abcd Efgh Ijkl');
log(getInitials('Abcd Efgh Ijkl Mnop');
console.log(getInitials(‘bcdÉfgh Ijkl Mnop’);
console.log(getInitials('Ábcd-Éfgh Ijkl Mnop');
console.log(getInitials('bcd/.-,Éfgh Ijkl Mnop');

使用一些es6功能:

const testNameString='Hello World';
const testNameStringWeird='你好,黑暗,我的老朋友尼古拉斯·科斯特·瓦尔德';
const getInitials=nameString=>{
常量regexChar=/\D\w+/
返回名称字符串
.trim()//删除尾随空格
.split(“”)//在空格上拆分
.filter(word=>word.length>0)//去掉两个空格
.filter(word=>regexChar.test(word))//去掉特殊字符
.map(word=>word.substring(0,1).toUpperCase())//从每个单词中提取第一个字母并放入数组中
}
log('name:',testNameString',\n缩写:',getInitials(testNameString));
log('name:',testNameStringWeird,'\n缩写:',getInitials(testNameStringWeird))
还有一些其他的答案可以解决您的问题,但有点复杂。这里有一个更具可读性的解决方案,它涵盖了大多数边缘情况

由于您的全名中可以包含任意数量的单词(中间名),因此我们最好将其放入一个数组中,并从该数组中的第一个和最后一个单词中获取初始字符,然后一起返回字母

另外,如果您的“全名”仅包含一个单词,则
array[0]
array[array.length-1]
处的单词将是同一个单词,因此如果第一个
if
,我们将处理该问题

function nameToInitials(fullName) {
  const namesArray = fullName.trim().split(' ');
  if (namesArray.length === 1) return `${namesArray[0].charAt(0)}`;
  else return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`;
}
样本输出:

>nameToInitials('Prince')
/“p”

>nameToInitials('FirstName LastName')
/“FL”

>nameToInitials('1stName 2ndName 3rdName 4thName 5thName')

//“15”

这应该适用于大多数情况,包括中间名和名字(扩展名为@njmwas answer)


此解决方案使用阵列功能、箭头函数和三元运算符在一行中实现目标。 如果名字是一个单词,只取前两个字符,如果更多,则取名字和姓氏的第一个字符。 (感谢omn提醒使用单字名称用例)


我看到了很多非常复杂的方法。 我真的更喜欢尽可能地简化事情,并使用构图或咖喱来增强事情

这是我的2美分:


//助手
常量管道=(…fns)=>x=>fns.reduce((y,f)=>f(y,x);
const reverseText=(text=“”)=>text.split(“”).reverse().join(“”);
const getInitialsDelimiteBy=(分隔符=“”)=>(显示名称=“”)=>
显示名称
.trim()
.split(分隔符)
.reduce((acc,value)=>`${acc}${value.charAt(0)}`,'')
.toUpperCase();
常数
  var fullname = 'badmos tobi';
  initials(fullname); //returns BT 

  var surname = 'badmos';
  initials(surname); //returns BA

  var more = 'badmos gbenga mike wale';
  initials(more); //returns BW;
function nameToInitials(fullName) {
  const namesArray = fullName.trim().split(' ');
  if (namesArray.length === 1) return `${namesArray[0].charAt(0)}`;
  else return `${namesArray[0].charAt(0)}${namesArray[namesArray.length - 1].charAt(0)}`;
}
var personName = "FirstName MiddleName LastName";
var userArray = personName.split(" ");
var initials = [];
if(userArray.length == 1){
 initials.push(userArray[0][0].toUpperCase() + userArray[0][1]).toUpperCase();}
else if(userArray.length > 1){
initials.push(userArray[0][0].toUpperCase() + userArray[userArray.length-1][0].toUpperCase());}
console.log(initials);
const initialArr = name.split(" ").map((n)=>n[0]);
const init = (initialArr.length > 1)? `${initialArr[0]}${initialArr[initialArr.length - 1]}` : initialArr[0];
const initials = init.toUpperCase();
string.trim().split(' ').reduce((acc, cur, idx, arr) => acc + (arr.length > 1 ? (idx == 0 || idx == arr.length - 1 ? cur.substring(0, 1) : '') : cur.substring(0, 2)), '').toUpperCase()
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);

const nameProcessor = {
  single: (name = '') =>
    name
      .trim()
      .substring(0, 2)
      .toUpperCase(),
  multiple: pipe(
    name => name.trim().split(' '),
    words => `${words[0].charAt(0)}${words[words.length - 1].charAt(0)}`,
    initials => initials.toUpperCase(),
  ),
};

const getInitials = (displayName = '') => 
  displayName.split(' ').length === 1 
    ? nameProcessor.single(displayName) 
    : nameProcessor.multiple(displayName)

getInitials('FullName') // FU
getInitials('FirstName MiddleName LastName') // FL
getInitials('1stName 2ndName 3rdName 4thName 5thName') // 15
const getInitials = string => {
    const names = string.split(' ');
    const initials = names.map(name => name.charAt(0).toUpperCase())
    if (initials.length > 1) {
        return `${initials[0]}${initials[initials.length - 1]}`;
    } else {
        return initials[0];
    }
};
console.log(getInitials("1stName 2ndName 3rdName 4thName 5thName")); // 15
console.log(getInitials("FirstName MiddleName LastName")); // FL
let initial = username.match(/\b(\w)/g).join('')
const getInitials = string =>
  string
    .split(' ')
    .map(([firstLetter]) => firstLetter)
    .filter((_, index, array) => index === 0 || index === array.length - 1)
    .join('')
    .toUpperCase();
name.match(/(\b\S)?/g).join("").match(/(^\S|\S$)?/g).join("").toUpperCase()
name.match(/(\b\S)?/g).join("").toUpperCase()
name.match(/(^\S\S?|\b\S)?/g).join("").match(/(^\S|\S$)?/g).join("").toUpperCase()
const getInitials = (fullName) => {
  const allNames = fullName.trim().split(' ');
  const initials = allNames.reduce((acc, curr, index) => {
    if(index === 0 || index === allNames.length - 1){
      acc = `${acc}${curr.charAt(0).toUpperCase()}`;
    }
    return acc;
  }, '');
  return initials;
}