首页 > 解决方案 > JavaScript 学号验证问题

问题描述

对此是新的,所以希望我的问题足够具体,使其有意义。

我正在尝试创建一个验证“学号”的网页——

例如,A89071231 将是一个有效的学号,但 A00000000 不是,也不会只是“A”或“A123”。

用户的输入必须是 A + 正好 8 个不全为零的数字。

到目前为止,我所拥有的是以下内容。其中“StudentNo”= 一个 HTML id 标记,“calculate”函数用于计算学生平均成绩。

我只需要帮助弄清楚如何编写代码,以便第一个字符 A 之后的每个数字可以是 0-9 之间的任何数字,并且仍然可以提供有效输入,除了用户在“A”之后输入所有 0 的情况。

我认为正则表达式是最简单的方法,或者使用 substr() 或 substring() 但我对 JavaScript 不是很熟悉,似乎无法弄清楚我哪里出错了。

谢谢你提供的所有帮助!!!

function calculate();
var sno = $("StudentNo").value.trim();
if(sno === "" || !sno.startsWith("A") {
  alert("Student Number is missing, please enter your Student A Number.");
  $("StudentNo").focus();
  return;
}

标签: javascript

解决方案


您应该能够使用带有负前瞻断言的正则表达式,使用 group: 。我们会在后面加上所需的 8 位数字。(?!0{8})(\d{8})

我们将其包装在一个函数中checkStudentNumber(),该函数将学生编号作为唯一参数,并返回一个布尔值 true/false 值,指示该编号是否有效。

function checkStudentNumber(number) { 
    return /^A(?!0{8})(\d{8})$/.test(number)
}

const numbers = ['A12345670', 'A00000001', 'A00010000', 'A12345678','A00000000', 'A1234567', 'A123456789', 'GARBAGE'];
console.log('Tests:');
console.log('\nNumber  \tValid');
numbers.forEach(number => console.log(number.padEnd(8, ' '), '\t', checkStudentNumber(number) ? 'Yes': 'No'));
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读