当前位置: 首页 > 知识库问答 >
问题:

密码规则的正则表达式

桂阳文
2023-03-14

我需要密码规则。以下是规则。

密码必须遵循以下准则:

>

  • 至少有八个字符长
  • 包含这4个选项中的3个:小写字母、大写字母、数字或特殊字符
  • 当用户指定不符合上述规则的密码时,返回消息说明:

    密码长度必须至少为8个字符,并包含以下4个选项中的3个:

    • 小写字母(a-z)
    • 大小写字母(A-Z)
    • 数字(0-9)
    • 特殊字符 (! @#$%^

    请帮助我获得一个正则表达式来处理上述条件。

    我感谢你的帮助。以下是我的要求的解决方案

    if(password.matches("^(?=.*[0-9]).{1,}$")){
    validCount++;
    }
    if(password.matches("^(?=.*[a-z]).{1,}$")){
    validCount++;
    }
    if(password.matches("^(?=.*[A-Z]).{1,}$")){
    validCount++;
    }
    if(password.matches("^(?=.*[@#$%^&+=]).{1,}$")){
    validCount++;
    }
    return validCount >= 3 ? true : false;
    

    谢谢,兰基

  • 共有2个答案

    计寒
    2023-03-14

    我会这样做:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class ValidatePassword
    {
        public static void main (String[] args)
        {
            String pw = "abaslkA3FLKJ";
    
            // create an array with 4 regex patterns
    
            Pattern [] patternArray = {
                Pattern.compile("[a-z]"),
                Pattern.compile("[A-Z]"),
                Pattern.compile("[0-9]"),
                Pattern.compile("[&%$#]")
            };
    
            int matchCount = 0;
    
            // iterate over the patterns looking for matches
    
            for (Pattern thisPattern : patternArray) {
                Matcher theMatcher = thisPattern.matcher(pw);        
                if (theMatcher.find()) {
                    matchCount ++;
                }
            }
    
            if (matchCount >= 3) {
                System.out.println("Success");
            }
    
            else {
                System.out.println("Failure: only " + matchCount + " matches");
            }
        }
    }
    

    我只在第四个模式中添加了几个特殊字符。。。你必须根据自己的需要修改它。可能需要用反斜杠转义某些字符。您可能还需要添加其他约束,例如检查是否没有空格。那就交给你了。

    郜谦
    2023-03-14

    这是,如果你想要一个优雅的正则表达式,尽可能接近

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&'])[^ ]{8,}$
    

    其基本思想是使用一种称为“积极前瞻”的技术:

    (?=.*PutHereWhatYouWantToAllow)
    

    你的额外要求4分之3不容易用正则表达式解决,因为你不能让它们基本上计数。你可以写出上面正则表达式的必要排列(如果没有意义,请告诉我),但这将是一个很长的正则表达式。您可以做的是在代码中写出排列,这样正则表达式就可以保持可维护性,因为您没有逐字重复这些模式。

    如果你告诉我你的语言,我会试试的(C#?)因为这是一个很好的挑战。

    更新1

    下面是一个正则表达式,它至少能满足你的3个要求(也可以满足4个要求),只是为了迎接挑战。不要在生产中使用它,而是在语言中循环使用注释中提到的单个正则表达式。

    ^((? =.[a-z].[A-Z].[\d])|(? =.[a-z].[\d].[A-Z])|(? =.[ A-Z].[a-z].[\d])|(? =.[ A-Z].[\d].[a-z])|(? =.[\d].[a-z].[A-Z])|(? =.[\d].[A-Z].[a-z])|(? =.[a-z].[A-Z].[! @#$%^

    更新2

    这是在java采取的方法

    从我读到的评论中,你正在进行如下测试

    • 小写“^[a-z]*$”
    • 大写“^[A-Z]*$”
    • digits=“^[0-9]*$”

    我认为你没有走在正确的轨道上。只有当所有字符都是小写的时候,小写才会报告成功,而不仅仅是一个。其他的也一样。

    这是4个单独的正则表达式,其中至少3个应报告匹配

    [a-z]
    [A-Z]
    \d
    [!@#$%^&']
    

    下面是密码不应该包含空格的测试

    ^[^ ]*$
    

    该测试至少包含8个字符

    .{8,}
    

    所以我拆分了需求,而不是合并它们。这应该会让代码更容易阅读,尤其是当一个人从正则表达式开始的时候。

     类似资料:
    • 我有以下密码验证规则: 至少8个字符 我试图找到这个规则的正则表达式模式,最接近的是: 但这并不适用于所有规则。 我对正则表达式是新手,如果有任何可以学习正则表达式的资源,我将不胜感激。

    • 问题内容: 我在网上找到了一个脚本,并且在JavaScript中有一个密码正则表达式。我仍然想使用它,但是为了获得更高的安全性,我也想使用PHP来验证我的密码,但是我对正则表达式毫无用处。 要求: 必须至少8个字符 必须包含至少1个数字 必须至少包含一个大写字符 必须至少包含一个小写字符 如何构造正则表达式字符串以满足这些要求? 问题答案: 我发现在一个大的正则表达式中执行此操作有点像代码维护的噩

    • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was

    • 7.1 基本模式匹配 一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once

    • 问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:

    • 本文向大家介绍最新密码验证正则表达式,包括了最新密码验证正则表达式的使用技巧和注意事项,需要的朋友参考一下 正则表达式验证密码功能在项目中经常被使用到,但是很多朋友还是不大会使用密码正则表达式进行验证,本文小编为大家整理了php密码验证正则表达式、python密码强度正则,当然还有大家常用到的js正则表达式,希望大家喜欢。 刚开始复习一下,什么是正则表达式? 在编写处理字符串的程序或网页时,经常有