我正在尝试为密码验证创建正则表达式。以下是要求。
这是我到目前为止的表达方式:
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*?_~()-]*).*$
这个表达式主要起作用,除了我需要它只允许子弹5-9。现在它将允许未指定的字符,例如+=
。
如何将此表达式修改为仅允许项目符号5-9而不允许其他字符?
答案 0 :(得分:2)
你不需要前瞻检查第一个和第五个到第八个条件 - 你可以在最后的比赛中检查这一切,比如
\w
使用先行检查条件2-4。对于实际匹配,我们需要至少8个允许字符的字符。我使用a-zA-Z0-9_
整数SELECT t.*,
CASE WHEN t.ENDTIME between p.STARTTIME and p.ENDTIME OR p.ENDTIME IS NULL THEN 'TRUE' ELSE 'FALSE' END as Seq
FROM @tbl t
OUTER APPLY (
SELECT TOP 1 *
FROM @tbl
WHERE t.STARTTIME < STARTTIME and t.colA = colA and t.colS = colS and t.DATES = DATES
ORDER BY STARTTIME ASC) p
ORDER BY t.STARTTIME
来缩短时间。
您可以看到它正常工作C# - ThreadPool vs Tasks。
网站说明:限制密码中的字符通常被视为一个坏主意。另外here也有关于密码的说法。
答案 1 :(得分:1)
您可以将RegExp
分成不连续的部分,添加或删除所需的部分,使用Array.prototype.every()
,在函数中包含&& !/[+=]/.test(str)
,以及输入字符串的.length
属性
var matches = [/[A-Z]/, /[a-z]/, /\d/, /[!@#$%^&*?_~()-]/];
var str = "Ab0!#?~_";
var pw = matches.every(function(re) {
return re.test(str) && !/[+=]/.test(str)
}) && str.length === 8;
console.log(pw);