当至少有1个数字或1个特殊字符且总长度为8或更多时,模式应匹配。
它部分有效,但只有在特殊字符或数字值位于开头时才会有效。
到目前为止,我有:
/([\d]|[!@#$%^&*()_+])([a-z]).{8,}/
答案 0 :(得分:3)
为什么过分复杂RegExp
?当然可以,但您必须指定符合这些要求的可能字符组合的每个排列。就这样做:
if (/[\d!@#$%^&*()_+]/.test(string) && string.length >= 8) { ... }
答案 1 :(得分:0)
你反向做,不要试图积极匹配特殊字符,这限制了人们可以/必须使用的内容。相反,匹配您认为 not 不是特殊的东西,例如:
pw.length >= 8 && /\d/.test(pw) && /[^a-z\d\x20]/i.test(pw)
比检查长度,数字的存在,然后存在不是字母数字或空格的字符(i
标志使其不区分大小写)。您可能还想禁止通常无法在键盘上键入的空格和其他控制字符(防止人们粘贴垃圾):
&& !/[\x00-\x20]/.test(pw)