JavaScript学生编号验证问题



这是一个新问题,所以希望我的问题足够具体,让它有意义。

我正试图创建一个网页来验证";学号"---

  • 必须以一个";A">
  • 在A之后必须正好有8个数字
  • 但它们不能都是0

例如,A89071231将是一个有效的学生编号,但A000000000将不是,也不会只是";A";或";A123";。

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

到目前为止,我有以下内容。其中";StudentNo"=一个HTML id标记;计算";函数是计算学生的平均成绩。

我只需要帮助弄清楚如何写代码,以便第一个字符A后面的每个数字都可以是0-9之间的任何数字,并且仍然给出有效的输入;A";。

我认为regex是最简单的方法,或者使用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;
}

您只需要将3个条件处理为

1(!sno.startsWith("A")

2(sno.length !== 9

3(sno.slice(1).match(/0{8}/)

function validateSNo(sno) {
if (!sno.startsWith("A") || sno.length !== 9 || sno.slice(1).match(/0{8}/)) {
// alert("Student Number is missing, please enter your Student A Number.");
// $("StudentNo").focus();
console.log(
"Student Number is missing, please enter your Student A Number."
);
} else {
console.log("Perfect student number")
}
}
validateSNo("S");
validateSNo("A00000000");
validateSNo("A123");
validateSNo("A12345678");

我希望以下答案能帮助你

我检查了以下想法

  • 是否为第一个字符A
  • 第一个字符的其余部分是否只有数字(A12345678有效,A1234567B无效(
  • 第一个字符的其余部分是否有8位(A+8位或否(
  • 第一个字符的其余部分是否只有0值(是否为A000000000(

代码段

function checkStudentNumber(studentNumber){
var sno = studentNumber; // get student number

var checkInitialCharacter = sno.charAt(0) === "A" ? true : false; // check studentno first character A or not, if A output will be true

var exeptFirstLetter = sno.slice(1); // Separate execpt first character from string

var checkexeptFirstLetterCharactersLength  = exeptFirstLetter.length == 8 ? true : false; // character separated charactee count qual to 8 or not, if YES output will be true.

var checkExceptFirstCharacters = /^d+$/.test(exeptFirstLetter) ? true : false; // confirm rest of the first character has only numbers.

var convertExecptFirstlettersintoNumber = checkExceptFirstCharacters ? parseFloat(exeptFirstLetter) : null; // convert rest of the first character into number

var checkZeroValues =  convertExecptFirstlettersintoNumber === 0 ? true : false; // check  rest of the first character has only zero digits or not, 


if(!checkInitialCharacter || checkZeroValues || !checkexeptFirstLetterCharactersLength || !checkExceptFirstCharacters ){
alert(studentNumber + " : Student Number is missing, please enter your Student A Number.");
} else {
alert(studentNumber + " : Perfect student number");
}
}

checkStudentNumber("A00000000"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("B00000000"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("A12345"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("A12345678"); // Output: Perfect student number.
checkStudentNumber("ABCD78"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("A0000000B"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("A12345B78"); // Output: Student Number is missing, please enter your Student A Number.
checkStudentNumber("A45645678"); // Output: Perfect student number.

您应该能够使用带有负前瞻断言的正则表达式,使用组:CCD_ 4。接下来我们将使用所需的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; }

最新更新