涉及对象和验证的学校Javascript作业无法正常运行
在过去的两天里,我一直在努力完成这项任务。 作业的目标是创建一个javascript,在用户点击cancel或输入空白文本之前接收学生信息。 每次用户输入信息时,信息都会得到验证。如果信息有效,则会将其保存到学生对象数组中。 这是我的密码:涉及对象和验证的学校Javascript作业无法正常运行,javascript,validation,Javascript,Validation,在过去的两天里,我一直在努力完成这项任务。 作业的目标是创建一个javascript,在用户点击cancel或输入空白文本之前接收学生信息。 每次用户输入信息时,信息都会得到验证。如果信息有效,则会将其保存到学生对象数组中。 这是我的密码: var Student =[]; // Validates Student Courses, loops through making sure they are equal to courseList values. function validateCo
var Student =[];
// Validates Student Courses, loops through making sure they are equal to courseList values.
function validateCourses(courses){
var valid='';
var courseList = ['APC100','IPC144','ULI101','IOS110','EAC150','IBC233','OOP244','DBS201','INT222'];
alert(courses);
for(var i =0;i<courseList.length;i++){
var a = courses;
a.splice();
if(a[i]!==courseList[i]){
valid=false;
}
else{
valid=true;
}
}
return valid;
}
function formatingName(name){
var res ='',cap='';
res = res + name.charAt(0).toUpperCase();
cap = res + name.substr(1);
return cap;
}
// I'm having issues with this validation for the student id. the student id can only be xxx.xxx.xxx
function validateStudentID(sid){
var validate=0;
var patt1 = /^\(?([0-9]{3})\)?([.]?)([0-9]{3})?([.]?)([0-9]{2})$/;
var result = patt1.test(sid);
return result;
}
var courseSelect=[];
var tag=0;
// this displays what users are in what course depending on what the user enters
function code(coursecode){
for(var w = 0;w<count;w++){
for(var t = 0;t<Student[w].courses.length;t++){
var a = Student[w].courses;
a.splice();
if(a[t] == coursecode){
tag=1;
}
}
if(tag){
courseSelect.push(Student[w].fname + " " + Student[w].lname + " " + Student[w].id + " " + Student[w].email);
}
}
alert('List students registered in ' + coursecode + ' :\n\n' + courseSelect.join('\n'));
}
// main functions and validation calls
var userInput = "";
var i=0,count=0,j=4,flag=false;
var result='',courses=[];
var Student,validCourses;
do{
userInput = prompt("Please enter first name, last name,student ID,\n" +
"email and courses (speareted by ',').");
if(userInput != null && userInput !=''){
result = userInput.split(',');
for(var i=4;i<result.length && i < 10;i++){
courses.push(result[i].toUpperCase());
}
// VALIDATION OF STUDENT ID AND STUDENT COURSES */
while(!flag){
var valid = validateStudentID(result[2]);
alert(valid);
if(valid){
id = result[2];
flag=true;
}
else {
alert(Student.id + " is not valid Student ID!" + "\n" + "Please try again.");
flag=false;
}
validCourse = validateCourses(courses);
if(validCourse){
flag=true;
}
else {
alert( validCourse + " is not the course provided by the CPD program! \n Please try again");
flag=false;
}
}
if(flag){
Student.push({
fname:formatingName(result[0]),
lname:formatingName(result[1]),
id:result[2],
email:result[3].toLowerCase(),
courses:courses,
});
count++;
i++;
}
else {
Student = [];
}
}
}while(userInput != null && userInput !='');
alert('There are total '+ count + ' students registered');
var coursecode = prompt("Please enter course code: ");
code(coursecode);
var Student=[];
//验证学生课程,通过循环确保它们与课程列表值相等。
功能验证课程(课程){
var有效=“”;
var courseList=['APC100'、'IPC144'、'ULI101'、'IOS110'、'EAC150'、'IBC233'、'OOP244'、'DBS201'、'INT222'];
警觉(课程);
对于(var i=0;i,代码中一些最明显的问题是:
- 在输入部分之后有一个
while(!flag)
循环。该循环不包含任何其他输入请求。因此,如果validate*
方法返回false
,它将无休止地运行
- 您的正则表达式
/^\(?([0-9]{3})?([.]?)([0-9]{3})([.]?)([0-9]{2})$/
没有做您希望它做的事情。您可以将其简化为/^[0-9]{3}\.[0-9]{3}\.[0-9]{3}.[0-9]{3}$/
因为您只想知道输入参数sid
是否包含三个数字块,每个数字块的长度为3。您不需要任何大括号,也不需要通过\(?
无论如何都是错误的。你也没有通过\.
逃避你的观点,这是错误的,因为它们基本上匹配任何字符。你应该阅读更多关于正则表达式的内容
validateCourses
中的循环看起来有误。为什么要将courses
分配给一个新变量(它没有复制到a
),然后调用splice()
?如果条件也错误,则您的以下,因为它假定a
和courseList
长度相等,并且课程的位置会匹配。这当然不是您想要的。您应该检查课程中的每个课程是否包含在courseList
中,例如:de>var notInCourseList=courses.filter(函数(课程){return(courseList.indexOf(课程)=-1);})
然后return(notInCourseList.length==0);
。forEach
循环将是一个简单的选择。您应该阅读一些相关教程
- 类似地,我也没有看到在
code()
中使用var a=Student[w]。courses;a.splice();
的任何好理由。直接查看Student[w]。courses
JSFIDLE的工作效率稍高。谢谢你的详细回复!这是我的网络入门课程,我刚刚掌握了窍门,谢谢你告诉我!我已经根据你的建议修复了代码。我遇到了一个问题,但是在输入无效课程后,再次提示时,我无法租用有效课程。是吗t因为我在main中进行了验证?我不确定您想做什么,我似乎能够在jsfiddle中输入多个课程。根据您更改代码的具体方式,您可能必须在do{
之后(提示之前)添加一个标志=false;
,否则上次验证的标志/结果可能会被错误地重用。