我正在运行一些函数来验证表单中用户输入的文本是否包含至少一个数字和字母。它似乎没有工作。由于这两个函数几乎相同,我只发布其中一个:
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){
是的,我知道它非常混乱,但我还在学习。我确信有更先进/更清洁的方法来进行此验证,但就我的学校教育而言,我现在就是这样做的。
答案 0 :(得分:4)
它是“isNaN”,而不是“isNan”......而且,如果它不一个数字,那并不一定意味着它不是一个字母;事实上,这种逻辑似乎是倒退的,或者是颠倒的。
如果“isNaN”返回true
,那么它不是数字。这是一封信吗?好吧,你必须检查。如果“isNaN”返回false
,那么你所知道的就是它是'0'到'9'中的一个字符。
使用正则表达式可以做得更好,但如果这是作业,则可能无法使用该方法。你可以查看一个字符是否是一个字母,如:
function isLetter(c) {
c = c.toUpperCase();
return c >= "A" && c <= "Z";
}
答案 1 :(得分:4)
检查字符串是否有字母的最简单方法是正则表达式:
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]
返回一个字符串类型的字符,即使它是一个数字)
答案 2 :(得分:0)
我会使用正则表达式,这里有几个快速函数。
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;
}