从密码字段构建regex以排除字符/、\、‘和“。
$(':password').keyup(function () {
if ($(this).val().match(/^['"\\\/]+$/)) {
$(this).css("border", "5px solid red");
} else {
$(this).css("border", "5px solid green");
};
});如果密码字段包含任何非法字符,则输入字段周围的边框应变为红色。似乎发生的情况是,它只在字段包含完全非法字符时才会这样做。在许多非法字符中输入合法字符使字符串再次被接受。
我做错了什么?
谢谢
http://jsfiddle.net/8qLr6/8/
发布于 2014-02-19 07:48:24
问题是,您使用特殊字符(^和$)表示字符串的开始和结束,作为匹配的一部分(从而匹配整个字符串);如果删除这些字符,则在任何点都匹配任何“非法”字符;这将给出正则表达式:
/['"\\\/]+/JS Fiddle演示。
为了简洁,你也可以整理一下,以便:
$(':password').keyup(function () {
var $this = $(this);
$this.css('border', function(){
return '5px solid ' + ($this.val().match(/['"\\\/]+/) ? 'red' : 'green');
});
});JS Fiddle演示。
顺便说一句,在可用的地方,使用input[type="password"]比使用:password要高一些;这是因为前者可以传递给浏览器的原生document.querySelectorAll(),而不是使用Sizzle解析文档(使用jQuery/Sizzle特定的选择器)。
参考文献:
https://stackoverflow.com/questions/21874127
复制相似问题