Javascript 用于验证输入名称是否正常工作的JS函数

Javascript 用于验证输入名称是否正常工作的JS函数,javascript,validation,Javascript,Validation,此代码的目的是检查用户输入的名称。如果该值包含的内容不是-abcdefghijklmnopqrstuvxyz'abcdefghijklmnopqrstuvxyz,则函数将抛出错误 我无法让它工作,我不允许使用正则表达式。我还尝试了String1.indexOf(usr.substr(I,1))>-1),但这似乎也不起作用 function nameValidation(username) { var usr = document.getElementById("username").va

此代码的目的是检查用户输入的名称。如果该值包含的内容不是
-abcdefghijklmnopqrstuvxyz'abcdefghijklmnopqrstuvxyz
,则函数将抛出错误

我无法让它工作,我不允许使用正则表达式。我还尝试了
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;
}
函数名称验证(用户名){
var usr=document.getElementById(“用户名”).value;
usr=usr.trim();
var alpha=“-abcdefghijklmnopqrstuvxyz'abcdefghijklmnopqrstuvxyz”;
var-ok=1;
对于(变量i=0;i
最简单(至少要理解)的解决方案(不使用正则表达式)是逐个字符循环字符串,并根据允许的字符列表检查
.indexOf
,例如:

for (var i = 0; i < input.length; i++) {
    if (alpha.indexOf(input[i])==-1) {
        console.log("ERROR");
        break;
    }
}
for(变量i=0;i
类似这样的东西,可能是:

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;
}
函数isValidUsername(用户名){
var alpha=“-abcdefghijklmnopqrstuvxyz”;
username=username.toUpperCase();
对于(变量i=0,l=username.length;i

使用大写字符串更便宜,因此需要测试的字符集更短(虽然可能最多是边缘字符,因为即使使用本机大写也要付出代价。)

编辑:我看错了问题,认为如果有字母,您希望返回true。现在,它将确保每个字符都在
A
z
的ASCII值范围内。
text=“ABCDEFzzxasd1”;
有效=真;
对于(i=0;i122){
警惕(“哇,那不是一封信!”);
有效=错误;
打破
}
}
您可以通过使用
每一种
方法,以一种更“功能性”的方式来完成,这种方法允许我们打破一个循环,而不是
foreach

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

因此:

开始

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 );
}
然后


你能不能只匹配
/[^azAZ-']/
?我忘了提到我不允许使用正则表达式。我现在会在帖子上加上你。。。不允许使用正则表达式?我想是家庭作业问题。好吧,如果你能使用正则表达式,这将是一行。类似于
/[^A-z-']/
的东西,该死的,比我早。虽然您可以在函数外部声明
alpha
,但这样您就不会在每次调用时不必要地声明它(因为它始终是相同的,而不是函数的动态)。谢谢!这对我和其他评论都有帮助!
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;