密码的正则表达式 = 一个数字以及大小写字母和特殊字符但是!开头或结尾没有特殊字符
Posted
技术标签:
【中文标题】密码的正则表达式 = 一个数字以及大小写字母和特殊字符但是!开头或结尾没有特殊字符【英文标题】:Regex for password = one number and both lower and uppercase letters and special characters BUT!! no special characters at start or end 【发布时间】:2018-08-15 21:28:30 【问题描述】:我正在尝试为密码输入中的 html5 模式创建正则表达式。
密码必须至少包含:
1 个大写字母 1 个小写字母 1个号码 1 个特殊字符 8-20 个字符 不得以特殊字符开头或结尾任何帮助表示赞赏
【问题讨论】:
不要在 HTML 中验证密码。这几乎是你能做到的最糟糕的地方。 只是出于好奇,为什么您的密码不能以特殊字符开头/结尾?这对我来说似乎是真的奇怪的逻辑。 这只是内联验证。服务器端将负责繁重的工作。关于结尾或开头的特殊字符的原因......抱歉没有线索,他们没有告诉我原因。 你和你的团队应该看看Reference - Password Validation。 如果您需要做某种验证客户端只需使用 AJAX 调用您的服务器端验证脚本。无需创建 2 个正则表达式。您现在在 HTML 模式中所做的任何事情都可以撤消,如果您使用[a-z]
来确保小写字母(大写字母、数字和特殊字符也是如此。添加 logic 不允许密码以特殊字符开头和结尾也会减少潜在密码的数量,从而降低您的系统安全性。您的团队绝对应该重新评估密码策略。
【参考方案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 的说法。
【讨论】:
以上是关于密码的正则表达式 = 一个数字以及大小写字母和特殊字符但是!开头或结尾没有特殊字符的主要内容,如果未能解决你的问题,请参考以下文章
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位
至少一个大写字母、一个小写字母、一个数字或特殊字符的正则表达式