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