2011-12-02 175 views
59

我试图在JavaScript中创建一个正则表达式测试,测试字符串包含任何字符:如果你有兴趣:)

这是对我工作的一个很酷的密码更改应用程序

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

更多信息如果你”重新感兴趣这里的代码的其余部分

我有一个表,列出了密码的要求和作为最终用户类型th e新密码,它将测试一个Regexes数组,并在相应的表格行中放置一个复选标记,如果它...检出:)我只需要在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); 

} 

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

+4

这是相当有趣的是,回答你的问题出在冠军转义特殊字符和封闭斜杠除外 – sciritai

+1

为什么不使用' .addClass(“check”)'和'.removeClass(“check”)'?在代码中看到if(someBoolean == true)'总会让我畏缩,如果(someBoolean)'。或者,更好的是,只要执行'$(“。form table tr”)。eq(i + 1).toggleClass(“check”,!! this);有效=有效&& !!这;'。 – gilly3

+0

+1 @ gill3 thx代码审查 - 确实很棒的反馈。过去我已经使用过这些简短的方法。 – pixelbobby

回答

119

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

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

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

编辑: 连字符是特殊的,因为它可以用来表示一个字符的范围。这个相同的字符类别可以简化,范围如下:

/[$-/:-?{-~!"^_`\[\]]/ 

有三个范围。 '''到'/',':'到'?','{'到'〜'。字符的最后一个字符串不能与一系列更简单地表示:“^ _`[]

使用的ACSII table找到范围的字符类

+0

为什么没有提到量词\ Q和\ E用于转义字符序列? – SerG

+0

在找到这个解决方案之前,我正在走下角色类排除路线:匹配所有内容,但是阿尔法,数字,空格等等。 –

+1

连字符必须先出现才是常识吗?我读过几十个SO答案和正则表达式作弊表,这是我听到的第一个。你的回答为我节省了很多戏剧。谢谢! –

-3

从任何语言全部替换后者”。 A”,如果你想例如所有的数字为0:

return str.replace(/[^\[email protected][-`{-~]/g, "A").replace(/\d/g, "0"); 
+5

你在回答什么问题? – Toto