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

Regex check a user input string in JavaScript

提问人:jaalle 提问时间:10/26/2023 更新时间:10/26/2023 访问量: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;
    }
javascript 正则表达式 if-statement not-operator

评论

0赞 XMehdi01 10/26/2023
您应该将这些条件分开并单独检查它们
0赞 sln 10/26/2023
尝试if (idInput.value === "" || !studentNum.test(idInput.value))
0赞 sln 10/26/2023
此外,您可能还想将 ^$ 添加到您的正则表达式中。

答:

0赞 Luatic 10/26/2023 #1
  1. 如果输入为空与正则表达式不匹配,则应为 :。由于正则表达式与空字符串不匹配,因此您不需要检查。&&||idInput.value === ""
  2. !studentNum.test(idInput)应该是!studentNum.test(idInput.value)
  3. 您忘记了正则表达式中的锚点(字符串的开头)和(字符串的结尾)。如果没有它们,这只会在字符串中的任何位置搜索“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;
}

(旁注,有什么理由使用代替 / 吗?varletconst

评论

0赞 jaalle 10/26/2023
谢谢!它有效。但是,在我发布问题后,我将 && 切换到 ||它从接受任何输入到拒绝每一个输入。你能解释一下为什么会这样吗?再次感谢!(回答你的旁注:我是 JS 的新手,目前我们一直在使用 var)。
1赞 sln 10/26/2023
@jaalle - 您是否在正则表达式 test() 中使用了 idInput.value
1赞 jaalle 10/26/2023
@sln是的,我确实在正则表达式测试中使用了它
0赞 sln 10/26/2023
@jaalle - 虽然没有必要检查空字符串,因为 test() 如果为空(基于正则表达式)将失败,但为了可读性,您可以使用 ||它也会起作用。
1赞 Lukas Kuppers 10/26/2023 #2

我本来会把这个作为评论,但我没有足够的声誉。

根据你的问题,我相信你的代码只是有一个逻辑错误。

据我所知,您希望在输入无效的情况下输入 if 语句(因此它是空的,或违反了正则表达式)。但是,您使用的是 .&&||

对于测试用例,如果输入随机字符,则不会执行 if 语句。idInput.value !== ""