具有特殊字符的 Javascript 正则表达式密码验证

我尝试使用正则表达式验证密码。密码正在更新,如果我们有所有的字符作为字母。我哪里做错了?正则表达式正确吗?

function validatePassword() {
var newPassword = document.getElementById('changePasswordForm').newPassword.value;
var minNumberofChars = 6;
var maxNumberofChars = 16;
var regularExpression  = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
alert(newPassword);
if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
return false;
}
if(!regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}
}
272807 次浏览

如果你单独检查长度,你可以做到以下几点:

var regularExpression  = /^[a-zA-Z]$/;


if (regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}

使用正面的 向前看断言:

var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

如果没有它,当前的正则表达式只能匹配6到16个有效字符,它会验证它是否有 至少一个数字和 至少一个特殊字符。这就是为什么我们要向前看。

  • 断言一个字符串至少有一个数字;
  • 断言一个字符串至少有一个特殊字符。

不要试图在一个步骤中做太多的事情。把每条规则分开。

function validatePassword() {
var p = document.getElementById('newPassword').value,
errors = [];
if (p.length < 8) {
errors.push("Your password must be at least 8 characters");
}
if (p.search(/[a-z]/i) < 0) {
errors.push("Your password must contain at least one letter.");
}
if (p.search(/[0-9]/) < 0) {
errors.push("Your password must contain at least one digit.");
}
if (errors.length > 0) {
alert(errors.join("\n"));
return false;
}
return true;
}
function validatePassword() {
var p = document.getElementById('newPassword').value,
errors = [];
if (p.length < 8) {
errors.push("Your password must be at least 8 characters");
}
if (p.search(/[a-z]/i) < 0) {
errors.push("Your password must contain at least one letter.");
}
if (p.search(/[0-9]/) < 0) {
errors.push("Your password must contain at least one digit.");
}
if (errors.length > 0) {
alert(errors.join("\n"));
return false;
}
return true;
}

在下面的回答中有一个问题,因为在检查字符和数字时没有检查整个字符串,这是正确的版本

您可以为 javascript 验证创建自己的正则表达式

    /^            : Start
(?=.{8,})        : Length
(?=.*[a-zA-Z])   : Letters
(?=.*\d)         : Digits
(?=.*[!#$%&? "]) : Special characters
$/              : End






(/^
(?=.*\d)                //should contain at least one digit
(?=.*[a-z])             //should contain at least one lower case
(?=.*[A-Z])             //should contain at least one upper case
[a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters


$/)


Example:-   /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/

我使用以下脚本为最小8字母密码,至少有一个符号,大小写字母和数字

function checkPassword(str)
{
var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
return re.test(str);
}

用于密码的正则表达式 :

/^(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[a-zA-Z!#$%&? "])[a-zA-Z0-9!#$%&?]{8,20}$/

我花了很长时间才搞清楚这些限制,但我做到了!

限制: (注意: 我使用 >>< < 来显示重要字符)

  1. 最少8个字符 {>>8,20}
  2. 最多20个字符
  3. 至少一个大写字符 (?=.*[A-Z])
  4. 至少一个小写字符 (?=.*[a-z])
  5. 至少一位数字 (?=.*\d)
  6. 至少一个特殊字符 (?=.*[a-zA-Z >>!#$%&? "<<])[a-zA-Z0-9 >>!#$%&?<< ]

经过大量的研究,我能够想出这个。这有更多的特殊性质

validatePassword(password) {
const re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()+=-\?;,./{}|\":<>\[\]\\\' ~_]).{8,}/
return re.test(password);
}

当您重新制作帐户密码,确保它的8-20个字符包括数字和特殊字符,如 ##\/*-然后验证新的密码和重新输入完全相同,应解决的问题与密码验证

对我来说,这是完美的工作,我相信会为你们工作,检查它简单,准确

var regix = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.
{8,})");


if(regix.test(password) == false ) {
$('.messageBox').html(`<div class="messageStackError">
password must be a minimum of 8 characters including number, Upper, Lower And
one special character
</div>`);
}
else
{
$('form').submit();
}

下面是一个密码验证示例,希望您喜欢。

必须使用大写、小写、特殊字符、数字和限制8进行密码验证。

function validatePassword(){
    

var InputValue = $("#password").val();
var regex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
$("#passwordText").text(`Password value:- ${InputValue}`);
    

if(!regex.test(InputValue)) {
$("#error").text("Invalid Password");
}
else{
$("#error").text("");
}
}
#password_Validation{
background-color:aliceblue;
padding:50px;
border:1px solid;
border-radius:5px;
}
#passwordText{
color:green;
}
#error{
color:red;
}
#password{
margin-bottom:5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="password_Validation">
<h4>Password validation with Uppercase Lowercase special character and number must be required.</h4>
<div>
<input type="password" name="password" id="password">
<button type="button" onClick="validatePassword()">Submit</button>
<div>
<br/>
<span id="passwordText"></span>
<br/>
<br/>
<span id="error"></span>
<div>

非常有帮助。它将帮助最终用户识别在输入密码时哪个字符丢失/需要。

这里有一些改进(您可以在这里添加所需的特殊字符)

function validatePassword(p) {
//var p = document.getElementById('newPassword').value,
const errors = [];
if (p.length < 8) {
errors.push("Your password must be at least 8 characters");
}
if (p.length > 32) {
errors.push("Your password must be at max 32 characters");
}
if (p.search(/[a-z]/) < 0) {
errors.push("Your password must contain at least one lower case letter.");
}
if (p.search(/[A-Z]/) < 0) {
errors.push("Your password must contain at least one upper case letter.");
}


if (p.search(/[0-9]/) < 0) {
errors.push("Your password must contain at least one digit.");
}
if (p.search(/[!@#\$%\^&\*_]/) < 0) {
errors.push("Your password must contain at least special char from -[ ! @ # $ % ^ & * _ ]");
}
if (errors.length > 0) {
console.log(errors.join("\n"));
return false;
}
return true;
}

在这里,我扩展了@Jo ão Silva 的回答,我需要检查不同的参数,并相应地抛出不同的消息。

我将正则表达式划分为不同的部分,现在 checkPasswordValidity(String)函数有条件地检查每个正则表达式部分并抛出不同的消息。

希望下面的例子能帮助你更好的理解!

/**
* @param {string} value: passwordValue
*/
const checkPasswordValidity = (value) => {
const isNonWhiteSpace = /^\S*$/;
if (!isNonWhiteSpace.test(value)) {
return "Password must not contain Whitespaces.";
}


const isContainsUppercase = /^(?=.*[A-Z]).*$/;
if (!isContainsUppercase.test(value)) {
return "Password must have at least one Uppercase Character.";
}


const isContainsLowercase = /^(?=.*[a-z]).*$/;
if (!isContainsLowercase.test(value)) {
return "Password must have at least one Lowercase Character.";
}


const isContainsNumber = /^(?=.*[0-9]).*$/;
if (!isContainsNumber.test(value)) {
return "Password must contain at least one Digit.";
}


const isContainsSymbol =
/^(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹]).*$/;
if (!isContainsSymbol.test(value)) {
return "Password must contain at least one Special Symbol.";
}


const isValidLength = /^.{10,16}$/;
if (!isValidLength.test(value)) {
return "Password must be 10-16 Characters Long.";
}


return null;
}


//------------------
// Usage/Example:
let yourPassword = "yourPassword123";
const message = checkPasswordValidity(yourPassword);


if (!message) {
console.log("Hurray! Your Password is Valid and Strong.");
} else {
console.log(message);
}

此外,我们还可以将所有这些正则表达式模式组合成单个正则表达式:

let regularExpression = /^(\S)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹])[a-zA-Z0-9~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹]{10,16}$/;

注意: 上面讨论的正则表达式将在给定的输入值/密码中检查以下模式:

  • 它不能包含任何空格。
  • 它必须至少包含一个大写字母、一个小写字母和一个数字字符。
  • 它必须至少包含一个特殊字符。[ ~ ‘ !@# $% ^ & * ()—— + = {}[] | : ;”’< > ,. ?/_ something ]
  • 长度必须在10到16个字符之间。

谢谢!

我的验证模式-大写,小写,数字和特殊字符

new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9_])")

国际 UTF-8

这里没有一种解决方案允许使用国际化的人物,例如,éÉáááöÖæÆóÓúÚ,但是它们只关注于英文字母。

以下 regEx 使用 unicode UTF-8来识别大小写,因此允许使用国际字符:

// Match uppercase, lowercase, digit or #$!%*?& and make sure the length is 8 to 96 in length
const pwdFilter = /^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{8,96}$/gmu


if (!pwdFilter.test(pwd)) {
// Show error that password has to be adjusted to match criteria
}

这个 RegEx

/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{8,96}$/gmu

检查是大写,小写,数字还是 # $!%*?& 在密码中使用。它还将表情符号的长度限制为最小8个字符和最大96个字符,表情符号的长度可以计入多个字符。 最后,u告诉它使用 UTF-8。

<div>
<input type="password" id="password" onkeyup="CheckPassword(this)" />
</div>


<div  id="passwordValidation" style="color:red" >
    

</div>


function CheckPassword(inputtxt)
{
var passw= /^(?=.*\d)(?=.*[a-z])(?=.*[^a-zA-Z0-9])(?!.*\s).{7,15}$/;
if(inputtxt.value.match(passw))
{
$("#passwordValidation").html("")
return true;
}
else
{
$("#passwordValidation").html("min 8 characters which contain at least one numeric digit and a special character");
return false;
}
}