Javascript 有没有办法让正则表达式函数检查名字和姓氏?

Javascript 有没有办法让正则表达式函数检查名字和姓氏?,javascript,html,regex,Javascript,Html,Regex,我目前正在为我的编码课程做作业(我是初学者)。任务是创建一个包含两个输入的HTML页面,一个输入名字,一个输入姓氏,并创建一个提交按钮,单击该按钮时,检查名字和姓氏是否都以大写字母开头并至少包含一个字符。当它们都匹配正则表达式时,将使用警报并记录控制台日志。如果没有,则会使用不同的警报,并且控制台不会记录。当我完成html和脚本的制作后,我在两个输入中都输入了一个应该与正则表达式匹配的名称,但它只会对不正确的输入发出警报。有点不对劲,但我找不到 function regexChecker(fi

我目前正在为我的编码课程做作业(我是初学者)。任务是创建一个包含两个输入的HTML页面,一个输入名字,一个输入姓氏,并创建一个提交按钮,单击该按钮时,检查名字和姓氏是否都以大写字母开头并至少包含一个字符。当它们都匹配正则表达式时,将使用警报并记录控制台日志。如果没有,则会使用不同的警报,并且控制台不会记录。当我完成html和脚本的制作后,我在两个输入中都输入了一个应该与正则表达式匹配的名称,但它只会对不正确的输入发出警报。有点不对劲,但我找不到


function regexChecker(firstName, lastName) {
    firstName = document.getElementById("firstName").innerHTML;
    lastName = document.getElementById("lastName").innerHTML;
    let firstNameRegex = /^[A-Z][a-z]*$/;
    let lastNameRegex = /^[A-Z][a-z]*$/;
    if (firstName.match(firstNameRegex) && lastName.match(lastNameRegex)) {
        alert('Yay! Your inputs were all correct!' );
        console.log(true);
    }
    else {
        alert('Oh no! Thats an invalid format!' );
        console.log(false);
    }
}
在我没有提供的链接html中,每个名称有两个输入,以及一个按钮。我在第一行输入了艾萨克的名字,在第二行输入了丹尼尔斯的名字。
我希望警报是“耶!您的输入都正确!”,但我得到的却是“哦,不!这是一个无效的格式!”

您犯了两个错误:

  • 使用
    value
    而不是
    innerHTML
    <代码>没有
    innerHTML
  • match
    返回一个始终真实的数组。偶数
    布尔([])=>true
    。您应该使用
    test()
    而不是
    match
  • 您的
    RegExp
    将不会传递包含大写字母的字符串。您应该使用
    /^[A-Z][A-zA-Z]*$/
这是代码

function regexChecker(firstName, lastName) {
    firstName = document.getElementById("firstName").value;
    lastName = document.getElementById("lastName").value;
    let firstNameRegex = /^[A-Z][a-zA-Z]*$/;
    let lastNameRegex = /^[A-Z][a-zA-Z]*$/;
    if (firstNameRegex.test(firstName) && lastNameRegex.test(lastName)) {
        alert('Yay! Your inputs were all correct!' );
        console.log(true);
    }
    else {
        alert('Oh no! Thats an invalid format!' );
        console.log(false);
    }
}
注意:两个字符串都有相同的regex
/^[A-Z][A-Z]*$/
,因此您可以使用
every()
检查这两个字符串

function regexChecker(firstName, lastName) {
    firstName = document.getElementById("firstName").value;
    lastName = document.getElementById("lastName").value;
    let regex = /^[A-Z][a-zA-Z]*$/;
    if ([firstName,lastName].every(x => regex.test(x))) {
        alert('Yay! Your inputs were all correct!' );
        console.log(true);
    }
    else {
        alert('Oh no! Thats an invalid format!' );
        console.log(false);
    }
}

您可以使用此regexp:

/^([A-Z][a-z]*)+$/
它将测试它是否以大写字母开头,后跟小写字母,并且长度至少为一个字母

您可以将regexp与
.test()
一起使用,以获取真/假值

let regexp=/^([A-Z][A-Z]*)+$/
document.names.addEventListener('submit',e=>{
e、 预防默认值()
让firstValid=regexp.test(document.names.first.value)
让lastValid=regexp.test(document.names.last.value)
//健康检查
console.log(firstValid,lastValid)
如果(!firstValid)警报('名字无效!')
如果(!lastValid)警报('姓氏无效!'),则为else
else警报('两者都有效!')
})



也不需要使用innerHTML。您可以只对输入文本框使用值。您还可以将正则表达式模式设置为一个变量,因为它们是相同的。match是真实的,所以它将是精细的。InnerHTML不用于输入。这项工作:
/^([A-Z][A-Z]*)+$/
这对于赋值来说是可以的,但请注意,人们的名字像O'Neil(带A')和Björk。不要在实际生产代码中犯这个错误。进一步阅读: