Проверка на наличие письма не работает - PullRequest
2 голосов
/ 06 марта 2011

Я запускаю некоторые функции, чтобы проверить, что введенный пользователем текст в форме содержит хотя бы одну цифру и букву. Кажется, это не работает. Поскольку две функции практически идентичны, я просто опубликую одну из них:

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

Журнал ("letter =" + letter) никогда не отображается в моей консоли. Я, вероятно, упускаю что-то глупое, но, похоже, это не завершает функцию.

Для справки, вот как я вызываю функции:

if(pwd.value.length > 9){

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

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

Да, я знаю, что это очень грязно, но я все еще учусь. Я уверен, что есть более продвинутые / более чистые способы сделать эту проверку, но в целях моего обучения я делаю это сейчас так.

Ответы [ 3 ]

4 голосов
/ 06 марта 2011

Самый простой способ проверить, есть ли в строке буква, - это регулярное выражение:

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

Но я бы не рекомендовал этот метод, потому что isNaN проверяет, является ли первый аргумент числом или нет.Прежде всего, не все символы, которые не являются цифрами, являются буквами.Во-вторых, передаваемый аргумент является строкой (str[i] возвращает символ типа string, даже если это цифра)

4 голосов
/ 06 марта 2011

Это "isNaN", а не "isNan" ... ... также, если это не число, это не обязательно означает, что это не буква; на самом деле логика кажется обратной или перевернутой.

Если isNaN возвращает true, то это не число. Это письмо? Ну, ты должен проверить. Если «isNaN» возвращает false, то все, что вы знаете, это то, что это один из символов от «0» до «9».

Все это гораздо лучше сделать с помощью регулярных выражений, но если это домашнее задание, возможно, такой подход не может быть использован. Вы можете проверить, является ли символ буквой с чем-то вроде:

function isLetter(c) {
  c = c.toUpperCase();
  return c >= "A" && c <= "Z";
}
0 голосов
/ 06 марта 2011

Я бы использовал регулярные выражения, вот пара быстрых функций.

    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...