如何验证名称中的每个第一个字母都是大写字母



我有一个输入,用户在其中输入她的名字和姓氏。我需要验证第一个和第二个名字是否都以大写字母开头。还需要处理两个以上的名称。

我已经在验证对象中尝试过了。我意识到,在映射时,我为每个元素都得到了一个if,不知道如何正确地编写它。

nameCheck(value){
let name = value.split(" ");
name?.map(element => {
if(name?.length > 0 && element[0] === element[0].toUpperCase()){
return true
}
else{
return false
}
}
)
}

我这样称呼它:

const isValidName = validate.nameCheck(form.creator)
console.log(isValidName)

此处isValidName最终未定义。我的所有其他验证检查都是简单的if语句,效果很好。

知道如何解决这个问题吗?

您没有从方法nameCheck返回任何内容;但是您在这里使用的是map,如果您返回map返回的值,那么它将返回一个布尔值数组。

const validate = {
nameCheck(value) {
let name = value.split(" ");
return name?.map((element) => {   // change, Added return keyword
if (name?.length > 0 && element[0] === element[0].toUpperCase()) {
return true;
} else {
return false;
}
});
},
};
const isValidName = validate.nameCheck("Test user");
console.log(isValidName);
const isValidName2 = validate.nameCheck("Test User");
console.log(isValidName2);

我认为你不想return an array;您只需要return a Boolean value来告诉名称是否有效。

所以你可以在这里使用every作为:

const validate = {
nameCheck(value) {
return value.split(" ").every((s) => s[0].toUpperCase() === s[0]);
},
};
const isValidName = validate.nameCheck("Test user");
console.log(isValidName);
const isValidName2 = validate.nameCheck("Test User");
console.log(isValidName2);


编辑:如果两个单词之间有多个空格,则可以将空字符串过滤为

const validate = {
nameCheck(value) {
return value
.split(" ")
.filter(Boolean)
.every((s) => s[0].toUpperCase() === s[0]);
},
};
const isValidName = validate.nameCheck("Test user");
console.log(isValidName);
const isValidName2 = validate.nameCheck("Test      User");
console.log(isValidName2);


firstnamelastname的验证

1( Using split and regex

const names = value.split(/s+/);
if(names.length > 1) /* There are multiple names */

2(Using split and Destructuring

const [firstname, lastname] = value.split(/s+/);
if (firstname && lastname) {
/* Both firstname and lastname is present  */
}  

相关内容

  • 没有找到相关文章

最新更新