Javascript 功能未拾取验证的第二部分
我正在进行表单验证,我设置了一组逻辑结构和一组验证函数。一切都在进行,直到最后一组逻辑结构,它必须验证社会保险号码Javascript 功能未拾取验证的第二部分,javascript,jquery,forms,validation,Javascript,Jquery,Forms,Validation,我正在进行表单验证,我设置了一组逻辑结构和一组验证函数。一切都在进行,直到最后一组逻辑结构,它必须验证社会保险号码 var errors = 0; e.preventDefault(); if(checkIsNull($('#firstname').val())){ errors++; $("#firstname").closest('.input-group').addClass('has-error'); }
var errors = 0;
e.preventDefault();
if(checkIsNull($('#firstname').val())){
errors++;
$("#firstname").closest('.input-group').addClass('has-error');
}else{
$("#firstname").closest('.input-group').removeClass('has-error');
}
if(checkIsNull($('#lastname').val())){
errors++;
$("#lastname").closest('.input-group').addClass('has-error');
}else{
$("#lastname").closest('.input-group').removeClass('has-error');
}
var phone = ['phone_area', 'phone_exch', 'phone_num'];
for(var i = 0; i < phone.length; i++){
if(checkIsNull($('#'+phone[i]+'').val()) || onlyNumbers($('#'+phone[i]+'').val())){
errors++;
$('#'+phone[i]+'').closest('.input-group').addClass('has-error');
}else{
$('#'+phone[i]+'').closest('.input-group').removeClass('has-error');
}
}
if(checkIsNull($('#email').val()) || !validateEmail($('#email').val())){
errors++;
$("#email").closest('.input-group').addClass('has-error');
}else{
$("#email").closest('.input-group').removeClass('has-error');
}
var dob = ['birth_month', 'birth_day', 'birth_year'];
for(var i = 0; i < dob.length; i++){
if(checkIsNull($('#'+dob[i]+'').val()) || onlyNumbers($('#'+dob[i]+'').val())){
errors++;
$('#'+dob[i]+'').closest('.input-group').addClass('has-error');
}else{
$('#'+dob[i]+'').closest('.input-group').removeClass('has-error');
}
}
var ssn = ['ssn_group', 'ssn_id', 'ssn_number'];
for(var i = 0; i < ssn.length; i++){
if(checkIsNull($('#'+ssn[i]+'').val()) || onlyNumbers($('#'+ssn[i]+'').val())){
errors++;
$('#'+ssn[i]+'').closest('.input-group').addClass('has-error');
}else{
$('#'+ssn[i]+'').closest('.input-group').removeClass('has-error');
}
}
电话号码和社会保险号码的验证方式完全相同,但当我用社会保险号码输入字母时,它不会拾取输入字段中的字母
对此有什么想法,或者有人能给我指出正确的方向吗?函数onlyNumbers实际上使用了'\D'而不是'\D','\D'的意思是所有非数字的,而不是你想象的数字。我解决了自己的问题。发生的事情是,当检查电话号码、出生日期和ssn的循环被迭代时,如果最后一个项目被签出,has error类将被删除。因此,当发现错误时,我必须在这些循环中添加中断,以保持显示正确 实际上,no\D将检查它是否包含非数字的内容。因此,它的工作原理与预期相同。我解决了这个问题。我需要在迭代.input组循环时添加中断。函数名为onlyNumber,您要验证字符串是否为非数字,这就是我的观点。不管怎么说,休息一下也不是一个好办法。你的观点是无效的。正则表达式模式将捕获正确识别的任何东西,不管它是否是字符串。阅读regex模式以及它们如何处理信息。如果你能找到一种更好的方法来验证这些信息而不使用中断,告诉我。实际上你的整个算法和代码都有点混乱,更不用说你真的不知道如何使用正则表达式了。所以这里有一个更干净的解决方案,您能解释一下,验证:[]部分吗?
//check if an input field is null
function checkIsNull(s){
if(s == ''){
return true;
}else{
return false;
}
}
//check if a phone number entered is valid
function validatePhoneNumber(s){
var str = s;
str = str.replace(/[^0-9]/g, '');
if(str.length != 10 || str == ""){
return false;
}
else{
return true;
}
}
//check if something only has numbers in it
function onlyNumbers(num){
var res = /\D+/g.test(num);
return res;
}
function validateEmail(s){
var str = s;
var res = str.match(/[!#$%&'*+-\/=?^_`{|}~a-zA-Z0-9.]*@\w+\.\w+/g);
if(res){
return true;
}else{
return false;
}
}