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

时间:2020-06-05 16:47:25

标签: javascript regex

我要检查密码是否至少包含1个特殊字符,但&&; <>

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

我已经尝试过类似的事情

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

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

上面我尝试过的正则表达式的输出示例: 1 !:假(需要为真,我知道我的正则表达式使带有数字或字母的任何东西都为假) ! :真 a:错误 1:假 !&:false(&使所有错误都正确) !<:true(仍然允许小于号或&(; <>)以外的其他任何东西,必须为false)

3 个答案:

答案 0 :(得分:1)

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

测试一下:

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/>

答案 1 :(得分:-1)

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

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

答案 2 :(得分:-1)

/(?=.[#!])[^&\\;<>]+$/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!'));