regex 正则表达式检查JavaScript中的用户输入字符串

sxissh06  于 7个月前  发布在  Java
关注(0)|答案(2)|浏览(55)

我有一个if语句,它检查用户是否将输入留空并且没有输入正确的模式(本质上是一个学生编号)。然而,当我输入一个随机的单词和数字组合时,它似乎仍然通过,好像它没有检查正则表达式验证。

var idInput = formHandle.f__id; //this connects back to my HTML form
    var studentNum = /(n|N)\d{8}/;
    if (idInput.value === "" && !studentNum.test(idInput)) {
        idInput.style.background = 'red';
        idInput.focus();
        return false;
    }

字符串

pbpqsu0x

pbpqsu0x1#

  • 我本想留下这句话作为评论,但我没有足够的声誉。*

根据你的问题,我相信你的代码只是有一个逻辑错误。
据我所知,你想在输入无效的情况下输入if语句(所以它是空的,或者违反了正则表达式)。但是,你使用的是&&而不是||
对于您的测试用例,如果您输入随机字符,则idInput.value !== "",因此if语句将不会执行。

zhte4eai

zhte4eai2#

1.你的&&应该是||:如果输入为空 * 或 * 不匹配正则表达式。因为正则表达式不会匹配空字符串,所以你不需要idInput.value === ""检查。

  1. !studentNum.test(idInput)应为!studentNum.test(idInput.value)
    1.你忘记了正则表达式中的锚^(字符串的开始)和$(字符串的结束)。没有它们,这只是在字符串中搜索“n或N后跟8位”* 任何地方 *。
    固定代码:
var idInput = formHandle.f__id; //this connects back to my HTML form
var studentNum = /^(n|N)\d{8}$/;
if (!studentNum.test(idInput.value)) {
    idInput.style.background = 'red';
    idInput.focus();
    return false;
}

字符串
(side注意,是否有任何理由使用var而不是let/const?)

相关问题