1

原谅这是一个愚蠢的问题。我在大学做一个网页设计主题,完全被卡住了。我必须使用 Javascript 验证密码以确保它具有大写字母、小写字母、数字字符和至少 4 个字符。

这是我拥有的代码,它提醒我说我没有包含字符,但是当我包含它们时,我仍然收到警报。任何帮助表示赞赏。

var y = document.forms["loginDetails"]["password"].value;
if (y.length < 4) {
    alert("Your password needs a minimum of four characters")
}
if (y.search[/a-z/i] < 1) {
    alert("Your password needs a lower case letter")
}
if (y.search[/A-Z/i] < 1) {
    alert("Your password needs an uppser case letter")
}
if (y.search[/0-9/] < 1) {
    alert("Your password needs a number")
    return false;
}
4

6 回答 6

2

您的代码有几个错误

  • 比较应该<0不是<1search当找不到正则表达式时返回负值)
  • /i在正则表达式中(不区分大小写 - 尝试找出大写/小写字符时不合适)
  • 搜索功能调用错误(使用 of[]而不是()
  • in regexp[]缺失([]在 regexp 中表示给定范围内的一个字符,因此[a-z]将匹配每个小写字符,而a-z仅匹配字符串 'az')

它应该看起来像:

if (y.length < 4) {
  alert("Your password needs a minimum of four characters")
} else if (y.search(/[a-z]/) < 0) {
  alert("Your password needs a lower case letter")
} else if(y.search(/[A-Z]/) < 0) {
  alert("Your password needs an uppser case letter")
} else  if (y.search(/[0-9]/) < 0) {
  alert("Your password needs a number")
} else {
    // Pass is OK
}
于 2013-05-04T17:51:57.017 回答
2

您的代码存在一些问题:

  1. String.search()-1如果没有找到正则表达式,则返回。如果在(第一个)字符处找到字符串,则检查< 1仍然会错误地返回。true0th
  2. String.search()是一个函数,需要( )在参数周围使用括号而不是括号来调用[ ]
  3. 您不想在正则表达式中执行不区分大小写的/i搜索,因此请删除该选项。
  4. 尝试跟踪另一个变量中是否存在错误。然后,如果任何一种情况产生错误,您可以返回false.

尝试这个:

var error = false;
var message = '';
if (y.length < 4) {
  message += "Your password needs a minimum of four characters. ";
  error = true;
}
if (y.search(/[a-z]/) == -1) {
  message += "Your password needs at least one lower case letter. ";
  error = true;
}
if (y.search(/[A-Z]/) == -1) {
  message += "Your password needs at least one upper case letter. ";
  error = true;
}
if (y.search (/[0-9]/) == -1) {
  message += "Your password needs a number.";
  error = true;
}
if (error) {
  alert(message);
  return false;
}
于 2013-05-04T17:56:04.507 回答
1

请注意,“搜索”是一个函数,因此您必须像 y.search() 一样调用它,而不是使用 [] 括号(它们用于访问成员。y“搜索”将具有相同的效果,但搜索 []不行,因为它不是数组

于 2013-05-04T17:44:14.083 回答
1

尝试通过以下方式更改您的代码:

  • 添加return false;到每个失败语句。
  • 更改search()函数语法。
  • 您不需要使用/i,因为它不检查案例。

代码

var y = document.forms["loginDetails"]["password"].value;
if (y.length < 4) {
    alert("Your password needs a minimum of four characters")
    return false;
}
if (y.search(/[a-z]/) < 1) {
    alert("Your password needs a lower case letter")
    return false;
}
if (y.search(/[A-Z]/) < 1) {
    alert("Your password needs an uppser case letter")
    return false;
}
if (y.search(/[0-9]/) < 1) {
    alert("Your password needs a number")
    return false;
}
于 2013-05-04T17:45:06.147 回答
0

主要问题是您使用的是“i”修饰符,它告诉正则表达式不区分大小写,请尝试不使用此修饰符。

为了改善用户体验,我使用了一条错误消息,因此,您可以使用以下代码:

if(/[a-z]+/.test(s) && /[A-Z]+/.test(s) && /\d+/.test(s) && s.length >= 4)
  return true;

alert("Your password needs Upper and lower case letters, numbers and a minimum four chars");
return false;
于 2013-05-04T19:19:06.943 回答
0

你可以试试这个:

var y = document.forms["loginDetails"]["password"].value;

if (y.length < 4) {
    alert("Password should contain minimum four characters");
    return false;
} 

var pwd=/^(?=.*[a-z])/;
var pwd1=/^(?=.*[A-Z])/;
var pwd2=/^(?=.*[0-9])/;

if (pwd.test(y) == false) {
    alert("Password Should contain atleast One lowerCase letter");
    return false;
}

if (pwd1.test(y) == false) {
    alert("Password Should contain atleast One UpperCase letter");
    return false;
}
if (pwd2.test(y) == false) {
    alert("Password Should contain atleast One Number");
    return false;
}

或者,您也可以在一行中执行相同的操作:

var pwd=/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/;
if (pwd.test(y) == false) {
    alert("Password Should contain atleast One Number, One UpperCase and a lowercase letter");   
    return false;
}
于 2013-11-21T06:20:44.240 回答