我正在尝试创建正则表达式以检查密码是否包含特殊字符。 https://www.owasp.org/index.php/Password_special_characters 看起来像这样
new RegExp('[!@#\$%\^\&*\)\(+=._\'",/<>?[\\\]`{|}~:;-\s]', 'g');
不幸的是,它也捕获了裸词:reg.test('word')返回true。 我的正则表达式怎么了?
答案 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]
。