谁能告诉我如何通过 javascript 中的正则表达式表单验证来检查这一点。
学生姓名必须仅包含字母。元音和辅音的数量必须相等。
谁能告诉我如何通过 javascript 中的正则表达式表单验证来检查这一点。
学生姓名必须仅包含字母。元音和辅音的数量必须相等。
我认为您不能仅使用正则表达式来做到这一点。
我的解决方案
替换字符串中不是元音的所有字符并返回它的长度,与辅音相同。然后你所要做的就是检查辅音的数量是否与元音匹配。
const getNumberOfVowels = (string) => string.replace(/[^aeiouAEIOU]/g, "").length;
const getNumberOfConsonants = (string) => string.replace(/[aeiouAEIOU]/g, "").length;
const isAValidName = (name) => {
const vowels = getNumberOfVowels(name);
const consonants = getNumberOfConsonants(name);
return vowels === consonants;
}
console.log(isAValidName("Adam"));
以下代码可用于验证:
const validateStudentName = (name) => {
const regExp = /[^a-zA-Z]/;
const isEven = name.length % 2 == 0;
const vowels = ['a', 'e', 'i', 'o', 'u'];
const vowelCount = [...name].reduce((sum, char) => vowels.includes(char.toLowerCase()) ? sum + 1 : sum, 0);
console.log(!regExp.test(name) && isEven && vowelCount === name.length / 2);
}
validateStudentName("abaci");
您将需要创建一个执行两件事的函数:
您将需要以下表达式:
/^[a-z]+$/i
– 只有字母字符(不区分大小写)/[aeiouy]/ig
– 只有元音/[^aeiouy]/ig
– 只有辅音const isValidName = (name) =>
/^[a-z]+$/i.test(name) &&
name.match(/[aeiouy]/ig).length === name.match(/[^aeiouy]/ig).length;
console.log(isValidName('Gene')); // Valid
console.log(isValidName('Abby')); // Valid
console.log(isValidName('Charles')); // Invalid