仅适用于特殊字符的Javascript RegExp

仅适用于特殊字符的Javascript RegExp,javascript,regex,escaping,Javascript,Regex,Escaping,我正在构建一个实时密码验证程序。我需要检查这些特殊字符中是否至少存在一个:!@$%^&*()+ 我还看到了其他涉及字母字符和数字的问题,但我需要检查,只检查特殊字符。这是我至今为止所做的工作,但是当我回过头来编辑文本中间的一个字符时,它就停止工作了。 缩短代码: $('#account-password').on('input', function () { var pass = $(this).val(), special = /^[\!@\#\$\%\^&\*\(\)

我正在构建一个实时密码验证程序。我需要检查这些特殊字符中是否至少存在一个:!@$%^&*()+

我还看到了其他涉及字母字符和数字的问题,但我需要检查,只检查特殊字符。这是我至今为止所做的工作,但是当我回过头来编辑文本中间的一个字符时,它就停止工作了。 缩短代码:

$('#account-password').on('input', function () {
    var pass = $(this).val(),
    special = /^[\!@\#\$\%\^&\*\(\)\+]+$/

   // Special Character Check
    if ($(this).val().match(special)) {
        // OK
    } else {
        //Not OK
    }

});
完整代码:


只为特殊字符编写regexp的正确方法是什么?

要检查这些特殊字符中的至少一个,此regex就足够了:

special = /[!@#$%^&*()+]/
您的正则表达式:
/^[\!@\\\\$\%\^&*\(\)\+]+$/
只有在所有输入字符都由这些特殊字符组成时才会匹配

PS:在字符类中,您不需要转义这些特殊字符。

^[\!@\\\\\$\%^&*\(\)\+]+$
仅当输入的每个字符都是这些字符中的一个时匹配。不要锚定表达式,不需要重复。(我希望您不要将密码长度限制为9个字符:-/)