匹配符号的正则表达式:!$%^&*()_ + |〜 - =`{} []:";'<>?,./

pix*_*bby 79 javascript regex jquery

我正在尝试在JavaScript中创建一个Regex测试,它将测试一个包含以下任何字符的字符串:

!$%^&*()_+|~-=`{}[]:";'<>?,./
Run Code Online (Sandbox Code Playgroud)

更多信息如果你有兴趣:)

这是我正在努力的一个非常酷的密码更改应用程序.如果您对这里的其他代码感兴趣.

我有一个列出密码要求的表,并且当最终用户键入新密码时,它将测试一个正则表达式数组并在相应的表行中放置一个复选标记,如果它...检出:)我只需要添加这个代替validation数组中的第4项.

var validate = function(password){
    valid = true;

    var validation = [
        RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
        RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
        !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
        !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
    ]

    $.each(validation, function(i){
        if(this)
            $('.form table tr').eq(i+1).attr('class', 'check');
        else{
            $('.form table tr').eq(i+1).attr('class', '');
            valid = false
        }
    });

    return(valid);

}
Run Code Online (Sandbox Code Playgroud)

是的,还有相应的服务器端验证!

Jef*_*man 148

这个的正则表达式非常简单.只需使用一个字符类.连字符是字符类中的特殊字符,因此它必须是第一个:

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/
Run Code Online (Sandbox Code Playgroud)

您还需要转义其他正则表达式元字符.

编辑: 连字符是特殊的,因为它可用于表示一系列字符.可以使用以下范围简化相同的字符类:

/[$-/:-?{-~!"^_`\[\]]/
Run Code Online (Sandbox Code Playgroud)

有三个范围.'$'到'/',':'到'?','{'到'〜'.最后一个字符串不能用一个范围更简单地表示:!"^ _`[].

使用ACSII表查找字符类的范围.

  • @SerG`\Q`和`\ E`在JS _RegExp_ engine中不起作用:(`/^\Q.\E$/.test('Q+E'); // true (2认同)

Ami*_*Zpr 13

实现此目的的最简单和最短的方法:

/[^\p{L}\d\s@#]/u
Run Code Online (Sandbox Code Playgroud)

解释

[^...] 匹配以下列表中不存在的单个字符

  • \p{L} => 匹配来自任何语言的任何类型的字母

  • \d => 匹配数字零到九

  • \s => 匹配任何类型的不可见字符

  • @# =>@#字符

不要忘记传递u(unicode)标志。

  • 这不是将它解释为在`w` 之外或在`s` 之外,并且由于这两者并不真正相交,所以它只会让所有字符通过?(因此不过滤任何东西。) (3认同)
  • @Zael你是对的,正则表达式(`/[\W\S]/`)确实让一切通过。我认为阿米尔的意思更准确的表述是“[^\w\s]”。在前者中,正则表达式表示“匹配任何不是字母数字的 **OR** 不是空格的内容”,正如您所提到的,让一切顺利,因为字母数字字符不是空格,反之亦然。后者表示“匹配任何不是字母数字的 **AND** 不是空格的内容”。当然,例外情况是重音字符(如“À”)与“[^\w\s]”匹配。 (2认同)

Mik*_*hem 10

回答

/[\W\S_]/
Run Code Online (Sandbox Code Playgroud)

解释

这将创建一个字符类,删除单词字符、空格字符并重新添加下划线字符(因为下划线是“单词”字符)。剩下的就是特殊字符了。大写字母表示对小写字母的否定。

\W将选择所有非“单词”字符等效于[^a-zA-Z0-9_]
\S将选择所有非“空白”字符等效于[ \t\n\r\f\v]
_将选择“_”因为我们在使用时否定它\W并且需要将其添加回