我正在做什么
例如我有一个名字
var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values[0];
var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);
console.log(f_name);
console.log(l_name);
当用户输入他的姓氏和其他标题等时它工作正常,它全部进入l_name但是当用户只输入名字时只有'John',那么l_name也会填充'john':( ,
我想要IF用户输入姓氏等等,那么只应填充l_name。
如果用户只键入名字,则只填充带名字的f_name
答案 0 :(得分:2)
var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values[0];
var l_name = values[1] ? nameofuser.substr(nameofuser.indexOf(' ') + 1) : '';
console.log(f_name);
console.log(l_name);
答案 1 :(得分:1)
正则表达式是此类分解的常用工具:
var nameofuser = str.match(/^\s*(\S+)\s*(.*?)\s*$/).slice(1);
'John Constantine vayo'
提供["John", "Constantine vayo"]
和'John'
给出了["John"]
。
但要小心这种猜测。在多元文化的世界中,只需拿走用户提供的东西就更安全。
答案 2 :(得分:1)
当在字符串上搜索没有空格-1
的空格时,将返回。因此-1 + 1将被计算为0,子字符串将返回整个字符串。
var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values.shift();
var l_name = values.length ? values.join(" ") : undefined;
console.log(f_name);
console.log(l_name);
答案 3 :(得分:0)
这是因为你必须确保该行有多个单词:
var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);
您的代码应如下所示:
var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values[0];
var l_name = (values.length > 1) ? nameofuser.substr(nameofuser.indexOf(' ') + 1) : '';
console.log(f_name);
console.log(l_name);
答案 4 :(得分:0)
执行.indexOf()
时,如果值不匹配,您的索引将为-1
,因此indexOf() + 1
会将其解释为-1 + 1 = 0
。所以你最终会做namesofuser.substring(0)
尝试这样的事情:
function getNames(str) {
var values = str.split(" ");
var f_name = values.shift();
var l_name = values.join(' ');
console.log(f_name);
console.log(l_name);
}
getNames('John Constantine vayo')
getNames("Foo")

function getNames(str) {
var index = str.indexOf(' ');
index = index > -1 ? index : str.length;
var f_name = str.substring(0, index);
var l_name = str.substring(index + 1);
console.log(f_name);
console.log(l_name);
}
getNames('John Constantine vayo')
getNames("Foo")

答案 5 :(得分:0)
只检查values数组中是否有多个单词? 希望这会有所帮助:)
var values = nameofuser.split(" ");
var f_name = values[0];
if (values.lenght >= 2) {
var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);
} else { //let lastname empty or do something else}
console.log(f_name);
console.log(l_name);
}
答案 6 :(得分:0)
nontrivial-square-root?

答案 7 :(得分:0)
这也有效,并解决了nameofuser
以空格开头时您遇到的问题
var nameofuser = 'John Constantine vayo';
var values = nameofuser.trim().split(" ");
var f_name = values[0];
var l_name = values.slice(1).join(" ")
console.log(f_name);
console.log(l_name);