首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“检查信件”验证无效

“检查信件”验证无效
EN

Stack Overflow用户
提问于 2011-03-06 17:31:03
回答 3查看 3.2K关注 0票数 2

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

代码语言:javascript
复制
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;
    }
}

日志(“信函=”+字母)从未出现在我的控制台中。我可能遗漏了一些愚蠢的东西,但它似乎并没有完成这个功能。

作为参考,下面是我如何调用这些函数:

代码语言:javascript
复制
if(pwd.value.length > 9){

            var pwdLetter = hasALetter(pwd);
            var pwdNumber = hasADigit(pwd);

            if(pwdLetter==true){
                if(pwdNumber==true){

是的,我知道这很麻烦,但我还在学习。我确信有更先进、更清洁的方法来进行这种验证,但为了我的学业,我现在就这样做了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-06 17:43:18

检查字符串是否有字母的最简单方法是正则表达式:

代码语言:javascript
复制
function hasLetter(str){
  // check for characters between a and z
  // i flag makes it case insensitive
  return /[a-z]/i.test(str);
}

如果您想循环遍历字符串,并且还希望使用isNaN函数,则可以这样做:

代码语言:javascript
复制
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;
}

但是我不推荐这种方法,因为isNaN检查第一个参数是否是数字。首先,并非所有不是数字的字符都是字母。其次,传入的参数是一个字符串(str[i]返回一个字符串类型的字符,即使它是一个数字)。

票数 4
EN

Stack Overflow用户

发布于 2011-03-06 17:39:54

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

如果"isNaN“返回true,那么它不是一个数字。是封信吗?你得检查一下。如果"isNaN“返回false,那么您只知道它是从'0‘到'9’的字符之一。

整件事用正则表达式做要好得多,但如果这是家庭作业的话,那可能是因为不能使用这种方法。您可以检查一个字符是否是一个字母,其内容如下:

代码语言:javascript
复制
function isLetter(c) {
  c = c.toUpperCase();
  return c >= "A" && c <= "Z";
}
票数 4
EN

Stack Overflow用户

发布于 2011-03-06 17:44:31

我会使用正则表达式,下面是几个快速函数。

代码语言:javascript
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5212132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档