javascript检查值是否至少包含2个或更多单词
我有一个字段,您可以在其中输入姓名并提交。我希望接收人名和姓氏,为此我需要检查该值是否包含至少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
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