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