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