JavaScript实现A开头加8位非全零数字的学号验证问题咨询
学号校验功能实现代码
方案一:正则表达式实现(推荐,代码简洁)
你要求的三个校验规则可以通过一个正则一次性覆盖,正则规则为/^A(?!0{8})\d{8}$/,各部分含义:
^A:限定字符串必须以A开头(?!0{8}):负向预查,限定A后面不能紧跟8个连续的0\d{8}:限定A后面必须有恰好8位0-9的数字$:限定字符串结束,避免输入超出9位字符
完整可运行代码如下:
function calculate() { // 注意:如果你的$是自定义获取id元素的函数可保留,原生JS请替换为 document.getElementById("StudentNo") // 如果用的是jQuery,需改为 $("#StudentNo").val().trim() var sno = $("StudentNo").value.trim(); const snoRule = /^A(?!0{8})\d{8}$/; if (!snoRule.test(sno)) { alert("学号格式错误,请输入有效学号,示例:A89071231"); $("StudentNo").focus(); return; } // 校验通过,后续写平均成绩计算逻辑 }
方案二:substr拆分校验(逻辑直观,适合新手理解)
如果你想更清晰看到每一步校验逻辑,可通过拆分字符串的方式实现:
function calculate() { var sno = $("StudentNo").value.trim(); // 第一步校验:非空、A开头、总长度必须是9位(A+8位数字) if(sno === "" || !sno.startsWith("A") || sno.length !== 9) { alert("学号必须以A开头,总长度为9位"); $("StudentNo").focus(); return; } // 第二步:截取A后的8位字符 const numPart = sno.substr(1); // 第三步:校验截取部分是否全为数字 if (!/^\d{8}$/.test(numPart)) { alert("A后必须为8位0-9的数字"); $("StudentNo").focus(); return; } // 第四步:校验是否全为0 if (numPart === "00000000") { alert("A后的8位数字不能全为0"); $("StudentNo").focus(); return; } // 校验通过,后续计算逻辑 }
注意事项
- 原生JS没有内置
$选择器函数,如果你没有自己封装过,把所有$("StudentNo")替换为document.getElementById("StudentNo")即可 - 如果项目引入了jQuery库,选择器写法改为
$("#StudentNo"),获取输入值方法改为.val()
内容的提问来源于stack exchange,提问作者Svetovid
相关产品推荐
相关产品推荐

