JS函数来验证输入名称是否正常工作

JS function to validate input name not working correctly

本文关键字:常工作 工作 是否 函数 验证 输入 JS      更新时间:2023-09-26

这段代码的目的是检查用户输入的名称。如果该值包含-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ以外的内容,则该函数将抛出错误。

我无法让这个工作,我不允许使用正则表达式。我也试过String1.indexOf(usr.substr(i,1)) > -1),但这似乎也不起作用。

function nameValidation(username) {
    var usr = document.getElementById("username").value;
    usr = usr.trim();
    var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var ok = 1;
    for (var i = 0; i < usr.length; i++) {
        if (!isNaN(usr[i])) {
            ok = 0;
            break;
        } else {
            ok = 1;
            document.getElementById("fnerror").innerHTML = "";
            document.getElementById("username").style.borderColor = "lightgrey";
            return true;
        }
    }
    if (ok == 0) {
        document.getElementById("fnerror").innerHTML = "X Enter Upper and lower case      letters, hypen, apostrohe only please";
        return false;
    }
    return true;
}

像这样,也许:

function isValidUsername(username) {
  var alpha = "-'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  username = username.toUpperCase();
  for (var i = 0, l = username.length; i < l; i++) {
    if (alpha.indexOf(username[i]) === -1) return false;
  }
  return true;
}

将字符串大写更便宜,因此可以使用更短的字符集进行测试(尽管可能最好是边缘,因为即使是纯大写也有成本…)

你可以用一种更"功能的方式"来做,通过使用every方法,它允许我们打破一个循环,而不是foreach

every方法对数组中存在的每个元素执行一次所提供的回调函数,直到它找到一个回调函数返回假值的元素(该值在转换为布尔值时变为假值)。如果找到这样的元素,every方法立即返回false。否则,如果callback为所有元素返回真值,则every将返回真值。回调函数只对数组中已经赋值的索引调用;对于已删除的索引或从未赋值的索引,不调用该函数。

Array.proototype.every

So:

function check(){
  //Get value input and transform it into array
  var value = document.querySelector('#username').value.split('');
  var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  //If there is an error, stop the loop and return result
  return value.every(function(elm){
    //check if elm is an alpha string
    return alpha.indexOf(elm) > -1;
  });
}

最简单的解决方案(不使用regex)是逐个字符遍历字符串,并根据允许的字符列表检查.indexOf,如:

for (var i = 0; i < input.length; i++) {
    if (alpha.indexOf(input[i])==-1) {
        console.log("ERROR");
        break;
    }
}

编辑:我看错了问题,以为如果有字母,你想返回true。现在,它将确保每个字符都在Az的ASCII值之内。

text = "ABCDEFzzxasd1";
valid = true;
for( i = 0; i < text.length; i++ ) {
    if ( text.charCodeAt(i) < 65 || text.charCodeAt(i) > 122 ) {
        alert("Woah, that's not a letter!");
        valid = false;
        break;
    }
}

开头
var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('');
function duplicates( element, index, array ){
  return array.indexOf(element) == index;
}
function isNameFormatCorrect( userName ){
  return ( alpha.concat(username.split(''))
    .filter( duplicates ).length === alpha.length );
}
然后

var username = "YourUserNameHere-"
isNameFormatCorrect( username ); => true;
var username = "YourUserNameHere-**"
isNameFormatCorrect( username ); => false;