2016-07-20 62 views
0

当至少有1个数字或1个特殊字符且总长度为8或更大时,模式应匹配。正则表达式可选组

它部分工作,但只有特殊字符或数字值在开头。

到目前为止,我有:

/([\d]|[[email protected]#$%^&*()_+])([a-z]).{8,}/ 
+1

只要你知道,'[AZ]'还包含字符''[\] ^'_'' –

+0

好点,谢谢你将它放到az。 – Adrian

+0

[正则表达式的密码必须包含至少8个字符,至少1个数字以及大小写字母和特殊字符](http://stackoverflow.com/questions/19605150/regex-for-password-must-至少包含8个字符,最少1个数字和机器人) –

回答

3

为什么一个过于复杂RegExp?当然这是可能的,但是你必须指定符合这些要求的可能字符组合的每个排列组合。只是这样做:

if (/[\[email protected]#$%^&*()_+]/.test(string) && string.length >= 8) { ... } 
+0

正则表达式也可以是:'/ [\ d!@#$%^&*()_ +] /' – rgthree

+0

没错,我会解决这个问题的。我刚刚复制了他的正则表达式 –

0

你倒着做的,不要试图积极配合特殊字符,限制人们可以/必须使用的。取而代之的是,比赛的东西你认为是并不特殊,如:

pw.length >= 8 && /\d/.test(pw) && /[^a-z\d\x20]/i.test(pw) 

比检查长度,一个数字的存在,那么这不是字母,也不是空间中的人物的存在(在i标志使得情况不敏感的)。你也可能要禁止的空间,并且通常不能够在键盘上键入其他控制字符(阻止人们在垃圾粘贴):

&& !/[\x00-\x20]/.test(pw)