提问人:jaalle 提问时间:10/26/2023 更新时间:10/26/2023 访问量:55
正则表达式检查 JavaScript 中的用户输入字符串
Regex check a user input string in JavaScript
问:
我有一个 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;
}
答:
0赞
Luatic
10/26/2023
#1
- 如果输入为空或与正则表达式不匹配,则应为 :。由于正则表达式与空字符串不匹配,因此您不需要检查。
&&
||
idInput.value === ""
!studentNum.test(idInput)
应该是!studentNum.test(idInput.value)
- 您忘记了正则表达式中的锚点(字符串的开头)和(字符串的结尾)。如果没有它们,这只会在字符串中的任何位置搜索“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;
}
(旁注,有什么理由使用代替 / 吗?var
let
const
评论
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 !== ""
评论
if (idInput.value === "" || !studentNum.test(idInput.value))