Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 要匹配符号的正则表达式:!$%^&*()+|~-=`{}[]:“'<>/_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 要匹配符号的正则表达式:!$%^&*()+|~-=`{}[]:“'<>/

Javascript 要匹配符号的正则表达式:!$%^&*()+|~-=`{}[]:“'<>/,javascript,jquery,regex,Javascript,Jquery,Regex,我试图在JavaScript中创建一个正则表达式测试,该测试将测试字符串是否包含以下任何字符: !$%^&*()_+|~-=`{}[]:";'?,./ 如果您感兴趣,请提供更多信息:) 这是我正在开发的一个非常酷的密码更改应用程序。如果您感兴趣,下面是代码的其余部分 我有一个表列出了密码要求,当最终用户键入新密码时,它将测试一个正则表达式数组,并在相应的表行中放置一个复选标记,如果它…签出:)我只需要添加此项来代替验证数组中的第4项 var validate = function(passwo

我试图在JavaScript中创建一个正则表达式测试,该测试将测试字符串是否包含以下任何字符:

!$%^&*()_+|~-=`{}[]:";'?,./
如果您感兴趣,请提供更多信息:)

这是我正在开发的一个非常酷的密码更改应用程序。如果您感兴趣,下面是代码的其余部分

我有一个表列出了密码要求,当最终用户键入新密码时,它将测试一个正则表达式数组,并在相应的表行中放置一个复选标记,如果它…签出:)我只需要添加此项来代替
验证
数组中的第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);

}

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

用于此的正则表达式非常简单。只需使用字符类。连字符是字符类中的一个特殊字符,因此需要放在第一位:

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/
有三个范围。“$”到“/”,“:”到“?”,和“{”到“~”。最后一个字符串不能用范围更简单地表示:!“^`[]


使用查找字符类的范围。

替换“A”中任何语言的所有Latter,例如,如果希望将所有数字都设置为0:

return str.replace(/[^\s!-@[-`{-~]/g, "A").replace(/\d/g, "0");

实现这一目标最简单、最短的方法是:

/[^\p{L}\d\s@#]/u
解释
[^…]
匹配下表中不存在的单个字符

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

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

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

  • @
    =>
    @
    字符

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

//字符串必须至少包含一个特殊字符,用于转义保留的正则表达式字符以避免冲突
const hasSpecial=密码=>{
const specialReg=new RegExp(
'^(?=.*[!@#$%^&*"\\[\\]\\{\\}/\\(\\)=\\\\\\-_´+`~\\:;,\\.€\\|])',
);
返回特殊示例测试(密码);
};

实现这一点的一个简单方法是负集[^\w\s]。这基本上抓住了:

  • 任何非字母数字字符(字母和数字)
  • 任何不是空格、制表符或换行符的内容(统称为空白)
由于某些原因[\W\S]的工作方式不同,它不进行任何过滤。Zael对其中一个答案的评论提供了某种解释。

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

\W
将选择所有等效于
[^a-zA-Z0-9][/code>
\S
将选择与
[\t\n\r\f\v]

等效的所有非“空白”字符

\u
将选择“\u”,因为我们在使用
\W
时会将其取反,并需要将其重新添加到中。有趣的是,您的问题的答案在于标题,除了转义特殊字符和包含正斜杠。为什么不使用
.addClass(“检查”)
.removeClass(“检查”)呢
?看到代码中的
if(someBoolean==true)
总是让我畏缩。只要做
if(someBoolean)
。或者,更好的是,只要做
$(“.form table tr”).eq(i+1)。toggleClass(“检查”!!这个);valid=valid&&!!这;
+1@gill3 thx用于代码审查-确实是很好的反馈。我过去使用过这些速记方法。@gilly3,它在FF中似乎很有效,但是!IE8。我喜欢这种速记。我正在试图弄清楚IE8有什么不同。为什么不提到用于逃避字符序列的量词\Q和\E字符?在找到这个解决方案之前,我一直在沿着字符类排除路线前进:匹配除字母、数字、空格等以外的所有字符。连字符必须排在第一位是常识吗?我已经阅读了几十个SO答案和正则表达式备忘单。这是我第一次听说它。你的答案让我省了很多麻烦。谢谢!@SerG
\Q
\E
在JS RegExp引擎中不起作用:(
/^\Q.\E$/.test('Q+E');//true
@q4w56反斜杠不在原始问题中指定的字符集中,因此不匹配的反斜杠是正确的。:)你在回答什么问题?你不需要一个“^”来表示不需要吗?@Webber不。它们是大写的,这使得声明是否定的。当我们用小写字母使用
\w
\s
时,需要使用
^
。这难道不解释为
w
s
,因为这两个字母都不正确吗ally intersect it只允许通过所有字符(因此不过滤任何内容。)@Zael你说得对,正则表达式(
/[\W\S]/
)确实允许所有字符通过。我认为Amir得到的更准确的表示应该是
[^\W\S]
。在前者中,正则表达式是这样说的“匹配任何非字母数字或非空白的内容”,正如您所提到的,让我们把所有内容都看一遍,因为字母数字字符不是空白,反之亦然。后者说“匹配任何非字母数字和非空白的内容”。当然,例外情况适用于重音字符(如
À
)由
[^\w\s]
匹配。这不包括uchar当您可以只使用regex文本时,不要使用
RegExp
构造函数。更不用说转义工作(大多数转义工作都是不必要的),而且效率更高。当你可以直接匹配角色时,为什么要使用复杂的前瞻?你能举个例子@Bergi吗?我不明白你在说什么
/[^\p{L}\d\s@#]/u
/[\W\S_]/