Javascript ';检查字母';验证无效

Javascript ';检查字母';验证无效,javascript,validation,forms,Javascript,Validation,Forms,我正在运行一些函数来验证用户在表单中输入的文本是否至少包含一个数字和字母。它似乎不起作用。由于这两个函数几乎相同,我将只发布其中一个: function hasALetter(textField){ //returns true or false based on whether or not the text field has at least one letter inside it console.log("Checking for letters...");

我正在运行一些函数来验证用户在表单中输入的文本是否至少包含一个数字和字母。它似乎不起作用。由于这两个函数几乎相同,我将只发布其中一个:

function hasALetter(textField){
    //returns true or false based on whether or not the text field has at least one letter inside it    
    console.log("Checking for letters...");

    var hasLetter = false;

    for(var i=0, checkLength=textField.length; i<checkLength; i++){
        var letter = textField.substr(i,1);
        console.log("letter = " + letter);
        if(isNan(letter) == false){
            hasLetter = false;
        }
    }
    if(hasLetter == true){
        return true;
    }
}
是的,我知道那里很乱,但我还在学习。我确信有更先进/更干净的方法来进行验证,但为了我的学业,我现在就这样做。

它是“isNaN”,而不是“isNaN”。。。而且,如果它不是一个数字,并不一定意味着它不是一个字母;事实上,逻辑似乎是颠倒的

如果“isNaN”返回
true
,则它不是一个数字。这是一封信吗?嗯,你得检查一下。如果“isNaN”返回
false
,那么您只知道它是字符“0”到“9”中的一个

使用正则表达式可以更好地完成整个过程,但如果这是一个家庭作业,那么可能无法使用这种方法。您可以检查字符是否是带有以下内容的字母:

function isLetter(c) {
  c = c.toUpperCase();
  return c >= "A" && c <= "Z";
}
<代码>功能计数器(c){ c=c.toUpperCase();
return c>=“A”&&c检查字符串是否包含字母的最简单方法是正则表达式:

function hasLetter(str){
  // check for characters between a and z
  // i flag makes it case insensitive
  return /[a-z]/i.test(str);
}
如果要循环遍历字符串并使用
isNaN
函数,可以执行以下操作:

function hasLetter(str){

  // loop through every character
  for(var i=0; i<str.length; i++){

    // check if the i-th character is not a number
    if(isNaN(str[i])){

      // if so, return true
      return true;
    }
  }

  // if the loop has finished and no letters have been found, return false
  return false;
}
函数hasLetter(str){
//循环遍历每个字符

对于(var i=0;i我将使用正则表达式,这里有几个快速函数

    function hasALetter(text)
    {
        var regex = new RegExp("[a-zA-Z]");
        if(text.match(regex))
            return true;
        else
            return false;
    }

    function hasANumber(text)
    {
        var regex = new RegExp("[0-9]");
        if(text.match(regex))
            return true;
        else
            return false;
    }

天哪,这是怎么回事?1)用
substr
2)获取单个字符是NaN 3)如果(真)return true否则return false是不必要的4)在return语句之后记录日志。这可以做得更好…@Harmen>我肯定可以,但因为我还在大学课程的第一节Javascript课上,教授让我们使用的是“substr”。此外,我还以为我已经去掉了“return false”语句P@GnomeSlice:textField.charAt(i)在该位置返回一个字母;'return hasLetter'应该更好,没有条件语句;)…@GnomeSlice:您是否只检查textField是否至少有一个字母?您使用什么浏览器来调试它?为什么使用条件?为什么不编写简单的'return text.match(regex)';'相反,我首先尝试了这个方法,不管出于什么原因,它返回了第一个匹配的字符。我不知道它是否是特定于浏览器的,但是当字符串与regexp不匹配时,FF返回'null',所以是的,为了更好地返回布尔值,请编写'return(text.match(regex)!=null);'并查看Harmen的答案,以获得最佳解决方案;)(只需使用regexp变量的test函数)循环完成后,这不会总是返回false吗?@Harmen:str[i]在IE中不起作用,
str.charAt(i)
是标准的交叉方式。例如,“asd”[1]在FF中,Chrome将返回's',但IE将返回'undefined'。小心…@GnomeSlice:如果循环完成,则没有字母;因此,是的,它将返回false。否则它将返回true,并从内部保留该函数loop@Maxym我非常确定通过方括号索引访问字符串中的字符在IE.Literal中会起作用字符串表示法+索引访问可能不起作用,正如您所说。@GnomeSlice:Harmen发布的函数接受字符串,查看您发送的代码,将输入元素作为参数。更改为hasALetter(pwd.value)这应该是可行的;Hasadigit也是如此。我的团队目前还没有学到任何东西。我认为逻辑似乎有点不可靠,但这就是我现在必须要解决的问题。你对拼写错误的看法是正确的,但修复它没有什么不同。
    function hasALetter(text)
    {
        var regex = new RegExp("[a-zA-Z]");
        if(text.match(regex))
            return true;
        else
            return false;
    }

    function hasANumber(text)
    {
        var regex = new RegExp("[0-9]");
        if(text.match(regex))
            return true;
        else
            return false;
    }