用于从全名字符串输入中分隔名字和姓氏的Javascript代码

时间:2018-05-05 16:35:27

标签: javascript string

我正在为一个简单的javascript代码进行练习,但出于某种原因,它无法正常工作。

<!DOCTYPE html>
<html>
<head>
    <script>
    var str,len,toS,first,last,output;
    function handling() {
        str = document.getElementById("box").value;
        len = str.len;
        toS = str.indexOf(" ");
        first = str.substr(0,toS);
        last = str.substr(toS+1,len-toS-1);

        output = "Hello Mr."+str+"<br>"+"Your first name is "+first+"<br>"+"Your last name is "+last+"<br>";
        document.getElementById("para").innerHTML=output;
    }
    </script>
</head>

<body>
    <p>Enter your full name</p>
    <textarea rows="20" cols="20" id="box"></textarea>
    <button onclick="handling();">Press button</button>
    <p id="para"></p>
</body>
</html>

输入:James Smith

输出结果为:

你好詹姆斯史密斯先生

你的名字是詹姆斯

您的姓氏是

没有正确显示姓氏。我不断重新检查代码,我不认为我犯了错误。那么为什么不输出姓氏呢?

4 个答案:

答案 0 :(得分:0)

更改此

last=str.substr(toS+1,len-toS-1);

到这个

last=str.substr(toS+1,len);

<强>更新

以上解决方案不是最好的 - 在您评论后我检查definition of substr并且它的第二个参数是字符数(我把总字符串长度视为可接受,但对于js纯粹主义者来说不是100%可满足)。所以te问题就行了

len = str.len; 

@tevemadar 在他的回答中提到。因此,在代码len = str.len = null中,您获得len-toS-1 = 0-toS-1 < 0(因此减去零个字符以进行减法 - 这意味着last=""作为结果)。所以它应该是

len = str.length

答案 1 :(得分:0)

我认为使用String.prototype.split()更好更短:

&#13;
&#13;
let str = "john smith";

str = str.split(" ");//<-- returns an array object
let first = str[0];
let last = str[1];

console.log(first);
console.log(last);
&#13;
&#13;
&#13;

请记住这一点,这些解决方案仅在输入只有两个单词时才有效。

答案 2 :(得分:0)

&#13;
&#13;
var str = "Hello Mr.{0} {1}<br>Your first name is {0}<br>Your last name is {1}<br>";
var fullname = "Walter Chapilliquen";
var output = str.replace(/\{(\d+)\}/g, function(a, i){
	return fullname.split(" ")[i]
});

document.write(output);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

len = str.len;是罪魁祸首。它应该是len = str.length;,因为(length)是String所拥有的。