【问题标题】:Regex for password = one number and both lower and uppercase letters and special characters BUT!! no special characters at start or end密码的正则表达式 = 一个数字以及大小写字母和特殊字符但是!开头或结尾没有特殊字符
【发布时间】:2023-03-03 04:52:21
【问题描述】:

我正在尝试为密码输入中的 html5 模式创建正则表达式。

密码必须至少包含:

  • 1 个大写字母
  • 1 个小写字母
  • 1个号码
  • 1 个特殊字符
  • 8-20 个字符
  • 不得以特殊字符开头或结尾

任何帮助表示赞赏

【问题讨论】:

  • 不要在 HTML 中验证密码。这几乎是你能做到的最糟糕的地方。
  • 只是出于好奇,为什么您的密码不能以特殊字符开头/结尾?这对我来说似乎是真的奇怪的逻辑。
  • 这只是内联验证。服务器端将负责繁重的工作。关于结尾或开头的特殊字符的原因......抱歉没有线索,他们没有告诉我原因。
  • 你和你的团队应该看看Reference - Password Validation
  • 如果您需要做某种验证客户端只需使用 AJAX 调用您的服务器端验证脚本。无需创建 2 个正则表达式。您现在在 HTML 模式中所做的任何事情都可以撤消,如果您使用 [a-z] 来确保小写字母(大写字母、数字和特殊字符也是如此。添加 logic 不允许密码以特殊字符开头和结尾也会减少潜在密码的数量,从而降低您的系统安全性。您的团队绝对应该重新评估密码策略。

标签: regex passwords


【解决方案1】:

没那么难:

(                   # Start of group
    (?=.*\d)        #   must contain at least one digit
    (?=.*[A-Z])     #   must contain at least one uppercase character
    (?=.*[a-z])     #   must contain at least one lowercase character
    (?=.*\W)        #   must contain at least one special symbol
    \w
       .            #   match anything with previous condition checking
        {6,18}      #   length is  characters
    \w 
)                   # End of group

一行:

((?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W)\w.{6,18}\w)

如果您不喜欢等于[a-zA-Z0-9_]\w,请将其替换为该组并删除下划线。

不过,我完全支持 ctwheels 的说法。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2017-07-06
    • 2016-12-14
    • 2015-03-12
    • 2021-09-08
    相关资源
    最近更新 更多