JS函数验证输入名称无法正常工作

时间:2015-08-04 21:06:05

标签: javascript validation

此代码的目的是检查用户输入的名称。如果值包含-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;
}

5 个答案:

答案 0 :(得分:3)

像这样的东西,也许:

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;
}

字符串大写更便宜,因此需要测试一组较短的字符(虽然可能是最好的边缘,因为即使是原生大写的成本......)

答案 1 :(得分:3)

您可以使用every方法以更“实用的方式”执行此操作,这样我们就可以打破循环而不是foreach

  

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

     

Array.proototype.every

所以:

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

}

答案 2 :(得分:2)

最简单的(至少要理解)解决方案(不使用正则表达式)将逐个字符循环遍历字符串,并针对允许的字符列表检查.indexOf,例如:

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

答案 3 :(得分:0)

编辑:我读错了这个问题并认为如果有一封信,你想要回复。现在,它将确保每个字符都在Az的ASCII值范围内。

&#13;
&#13;
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;
    }
}
&#13;
&#13;
&#13;

答案 4 :(得分:0)

开始
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;