javascript - JavaScript 学号验证问题
问题描述
对此是新的,所以希望我的问题足够具体,使其有意义。
我正在尝试创建一个验证“学号”的网页——
- 必须以“A”开头
- 在 A 之后必须正好有 8 个数字,
- 但它们不能全为 0
例如,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;
}
解决方案
您应该能够使用带有负前瞻断言的正则表达式,使用 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; }
推荐阅读
- python - scipy.optimize.minimize 在应用于带有或不带有多处理的熊猫数据帧时在某些行上执行多次
- javascript - 将输入传递给 ajax 返回空数据
- amazon-dynamodb - DynamoDB - 简单解释
- java - 如何读取带有时间戳的文本文件?在爪哇
- typescript - TypeScript:我为变量使用了随机名称,但仍然出现“无法重新声明”错误
- php - 错误:无法打开流:文件中没有这样的文件或目录
- swift - 用 swift 问题传回一个元素
- javascript - 地理位置在移动设备中不起作用(javascript)
- selenium - 自动爬取网站
- javascript - 验证字符串的正则表达式是否被 HTML 标记包围