正则表达式的特殊字符工作不正确

时间:2018-07-06 09:11:00

标签: javascript regex

我正在尝试创建正则表达式以检查密码是否包含特殊字符。 https://www.owasp.org/index.php/Password_special_characters 看起来像这样

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

不幸的是,它也捕获了裸词:reg.test('word')返回true。 我的正则表达式怎么了?

2 个答案:

答案 0 :(得分:0)

您可以使用负/反逻辑并针对不是数字或字母的任何字符进行测试。

在插入符([^A-Za-z0-9])与所有^ except匹配的地方使用A-Za-z0-9


const regex = /([^A-Za-z0-9]|[.\p{L}])/gm;

console.log('word: ' + regex.test('word'));
console.log('word!: ' + regex.test('word!'));
console.log('!£2word!: ' + regex.test('!£2word!'));
console.log('!ą,ć,ó!"£wordąćó: ' + regex.test('!ą,ć,ó!"£wordąćó'));

答案 1 :(得分:0)

您没有正确逃脱。 RegExp对象可以以字符串形式接收正则表达式,但转义很重要:它需要双反斜杠。

目前[;-\s]等于[;-s],其中包括57个字符:

[_;?\[\]@\\`\^<->aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsS-Z]

但是,它应该是[;\-\\s]