繁体   English   中英

密码-大写字母JavaScript

[英]Password - uppercase characters JavaScript

如果这是一个愚蠢的问题,请原谅。 我在uni上做一个网页设计课程,完全陷入困境。 我必须使用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;
}

您的代码有几个错误

  • 比较应该<0而不<1 (未找到正则表达式时search返回负值)
  • /i在regexp中(不区分大小写-尝试找出大写/小写字符时不合适)
  • 搜索功能调用错误(使用[]代替()
  • 在正则表达式[]缺失( []在正则表达式表示从给定的范围内的一个字符,所以[az]将匹配的每个小写字母而az将匹配只是字符串“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
}

您的代码存在一些问题:

  1. 如果找不到正则表达式,则String.search()返回-1 如果在第0th (第一个)字符处找到字符串,则对< 1检查仍将错误地返回true
  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;
}

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

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

  • 添加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;
}

主要问题是您使用的是'i'修饰符,它告诉regexp不区分大小写,请尝试不使用该修饰符。

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

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;

您可以尝试以下方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM