javascript检查值是否至少包含2个或更多单词

javascript检查值是否至少包含2个或更多单词,javascript,regex,string,input,Javascript,Regex,String,Input,我有一个字段,您可以在其中输入姓名并提交。我希望接收人名和姓氏,为此我需要检查该值是否包含至少2个单词。这是我现在正在使用的,但它似乎不起作用 function validateNameNumber(name) { var NAME = name.value; var matches = NAME.match(/\b[^\d\s]+\b/g); if (matches && matches.length >= 2) { //two o

我有一个字段,您可以在其中输入姓名并提交。我希望接收人名和姓氏,为此我需要检查该值是否包含至少2个单词。这是我现在正在使用的,但它似乎不起作用

function validateNameNumber(name) {
    var NAME = name.value;
    var matches = NAME.match(/\b[^\d\s]+\b/g);
    if (matches && matches.length >= 2) {
        //two or more words
        return true;
    } else {
        //not enough words
        return false;
    }
}

您可以使用String.Split()方法:

如果要传递“johndoe”作为名称值,则值将等于{“John”,“Doe”}

编辑:添加过滤器以删除空值。来源:

简单的解决方案(并非100%可靠,因为@cookiemonster提到“foo”返回4):

更好的解决方案是:

var str = "Big Brother";
var regexp = /[a-zA-Z]+\s+[a-zA-Z]+/g;
if (regexp.test(str)) {
    // at least 2 words consisting of letters
}

从代码段中更改此行

var matches = NAME.match(/\b[^\d\s]+\b/g);
对此

var matches = NAME.match(/\S+/g);
或者,如果不包括数字

var matches = NAME.match(/\b([a-z]+)\b/gi);

旁白(有趣的)注意:你的代码片段工作得很好。检查

可能不是总体上最好的解决方案(请参见其他答案),但它显示了如何计算regexp与字符串匹配的次数:

function validateNameNumber(name) {
    var nameValue = name.value;
    var regexp = /\b[^\d\s]+\b/g;
    var count = 0;
    while (regexp.exec(nameValue)) ++count;
    if (count >= 2) {
        //two or more words
        return true;
    } else {
        //not enough words
        return false;
    }
}

我只是通过运行for循环来检查空格

var correctFormat = false;
for (var i = 0; i = i < name.length; i++) {
    if (name[i] === " ") {
       correctFormat = true;
    }
}
if (correctFormat === false) {
    alert("You entered an invalid name");
    return false;
} else {
    return true;
}
var correctFormat=false;
对于(变量i=0;i=i

如果名字没有空格,知道名字和姓氏之间有空格,它将发出
警报(“您输入了一个无效的名字”)

什么叫“似乎不起作用”?显示您的输入,并解释预期和观察到的输出。你的代码对我有用。@lvogel:他不是,我是,因为这些答案很糟糕。@cookiemonster所以请你自己回答。@lvogel:不,直到OP回答了我上面的问题。你可能应该寻找你想要的字符分组,而不是你不想要的字符分组。例如,
/\w+/g
没有被否决的问题,但是解释一下为什么会被否决是很好的。有趣的是,4个答案中的3个在没有任何解释的情况下同时被否决了…
“foo”.split(“”).length;//6
为什么?它似乎想排除数字。你只是在改变标准,但最终还是同一个解决方案。@CookieMonester(1)他最后说它似乎不起作用,这足以让我不去分析每一行(2)我看到其他答案被否决,即使它们实际上是好的(没有看到OP的代表)所以(3)我想让我们给出一个不同的答案。其他答案都不好,但你的答案更好,这就是为什么我没有投反对票。然而,我认为你不必改变标准,尽管我认为OP最好能详细解释确切的标准。@Cookie Monster有趣的是OPs代码片段工作正常。检查一下,或者我遗漏了什么:)是的,我知道。他声称它对某些输入不起作用,但对我来说效果很好6
@cookiemonster这就是我提供另一种解决方案的原因。@cookiemonster但我认为用户不太可能真正输入“Foo”并在其中显示“输入您的姓名”。您的另一种解决方案在许多方面都是不正确的。测试你的答案。什么?你没抓住问题的重点吗?他想确认有两个词。我给出了一个使用您的解决方案给出假阳性的单词的示例。验证用户输入的名字和姓氏的最佳答案。
function validateNameNumber(name) {
    var nameValue = name.value;
    var regexp = /\b[^\d\s]+\b/g;
    var count = 0;
    while (regexp.exec(nameValue)) ++count;
    if (count >= 2) {
        //two or more words
        return true;
    } else {
        //not enough words
        return false;
    }
}
var correctFormat = false;
for (var i = 0; i = i < name.length; i++) {
    if (name[i] === " ") {
       correctFormat = true;
    }
}
if (correctFormat === false) {
    alert("You entered an invalid name");
    return false;
} else {
    return true;
}
str.trim().indexOf(' ') != -1 //there is at least one space, excluding leading and training spaces