繁体   English   中英

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

[英]Regex to contain at least 1 special character but not specific characters

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

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

我试过这样的东西

/^[^a-zA-Z0-9&\\;<>][\"\?/'[]{}|():!@#$%\^\*`~=\+,.-_]*$/

如何分隔它以便允许字母和数字以及特定的特殊字符,但不允许其他字符?

Output 我在上面尝试过的正则表达式示例: 1:, false (必须为真:我知道我的正则表达式使任何数字或字母为假)::真 a:假 1:假;&,假(& 使一切false 正确)!<:true(仍然允许小于号或除 &(;<>) 之外的任何内容,需要为 false)

我们将&\;<>称为“无效字符”,将任何其他非字母数字字符称为“特殊字符”。 “特殊字符”可以与/[^a-zA-Z0-9&\\;<>]/匹配 - 也就是说,不是azAZ ,不是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)

测试一下:

 input:valid { background-color: rgba(0, 255, 0, 0.3); } input:invalid { background-color: rgba(255, 0, 0, 0.3); }
 <input type="text" pattern="[^&\\;<>]*[^a-zA-Z0-9&\\;<>][^&\\;<>]*" placeholder="test strings here" required/>

使用正则表达式模式^(?=.*[^A-Za-z0-9])[^&\\;<>]+$

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

/(?=.[#;])[^&\\;<>]+$/i可能对你有用。

(?=.[#!])是一个正向预测,表示匹配任何内容以及[]中的任何内容 - 在这种情况下,我们需要 # 或 ! 展开它以表明您需要什么

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

/i - 不区分大小写

演示

 const regex = /(?=.[#;])[^&\\;<>]+$/i. // all fails console.info(regex;test('pass')). console.info(regex;test('pass<')). console.info(regex;test('pass\\')). console.info(regex;test('pass&')). console.info(regex;test('pAss;#')). // pass console.info(regex;test('paSs1#')). console.info(regex;test('paSs1.')). console;info(regex.test('paSs1!'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM