Javascript 正则表达式至少包含1个特殊字符,但不包含特定字符

Javascript 正则表达式至少包含1个特殊字符,但不包含特定字符,javascript,regex,Javascript,Regex,我想检查密码是否至少有1个特殊字符,但没有&\; 密码可以包含数字或字母,但不受限制 我试过这样的东西 /^[^a-zA-Z0-9&\\;<>][\"\?/'[]{}|():!@#$%\^\*`~=\+,.-_]*$/ /^[^a-zA-Z0-9&\\][\“\?/”[{}}124;():!@$%\^*`=\+,.-\]*$/ 如何将其分开,以便允许字母和数字以及特定的特殊字符,但不允许其他字符 我在上面尝试过的正则表达式的输出示例: 1!:false(必须为true,我

我想检查密码是否至少有1个特殊字符,但没有&\;<>

密码可以包含数字或字母,但不受限制

我试过这样的东西

/^[^a-zA-Z0-9&\\;<>][\"\?/'[]{}|():!@#$%\^\*`~=\+,.-_]*$/
/^[^a-zA-Z0-9&\\][\“\?/”[{}}124;():!@$%\^*`=\+,.-\]*$/
如何将其分开,以便允许字母和数字以及特定的特殊字符,但不允许其他字符

我在上面尝试过的正则表达式的输出示例: 1!:false(必须为true,我知道我的正则表达式会使任何带有数字或字母的内容都为false) !:对 a:错 1:错 !&:false(&使所有内容正确地为false) !<:true(仍然允许小于号或除&(;)以外的任何字符,需要为false)

让我们将
&
称为“无效字符”,并将任何其他非字母数字字符称为“特殊字符”。可以将“特殊字符”与
/[^A-zA-Z0-9&\\]匹配/
-也就是说,不是
a-z
a-z
,不是
0-9
,也不是任何无效字符

现在,我们的正则表达式可以搜索前缀或后缀为任意数量有效字符的“特殊字符”:

^[^&\\;<>]*[^a-zA-Z0-9&\\;<>][^&\\;<>]*$

^                                          -> match start of sequence (prevent arbitrary leading characters
 [^&\\;<>]*                                -> match 0 or more non-invalid characters
           [^a-zA-Z0-9&\\;<>]              -> match a mandatory special character
                             [^&\\;<>]*    -> match 0 or more non-invalid characters
                                       $   -> match end of sequence (prevent arbitrary trailing characters)
使用正则表达式模式
^(?=.[^A-Za-z0-9])[^&\\;]+$

在此模式的开头,正则表达式引擎使用正向前瞻确保字符串中至少有一个特殊字符(不是字母或数字)。然后,模式的常规匹配表示哪些字符不能使用。

/(?=[#!])[^&\]+$/i
可能适合您

(?=[#!])
是一个积极的前瞻,表示匹配
[]
中的任何内容-在这种情况下,我们需要一个#或!展开它以指示您需要什么

[^&\\;]
与这些字符不匹配

/i
-案例演示

演示

const regex=/(?=.[#!])[^&\\;]+$/i;
//一切都失败了
console.info(regex.test('pass'));

console.info(regex.test('pass“特殊字符”的定义是什么?可以说它是非字母数字字符,而不是您列出的无效字符之一吗?这不是
regex
的工作。对输入字符串进行简单的遍历,并计算它包含的每种类型的字符数(大写/小写字母、数字、允许的特殊字符、不允许的字符)。最后查看计数器,确定是否允许使用密码以及原因。写入代码的时间不应超过10分钟。@axiac或在1分钟内写入正则表达式;-)