的Javascript密码遵守
问题描述:
我需要密码才能满足这些要求的Javascript密码遵守
- 密码必须包含至少8个单词字符
- 必须有至少1个数字位数例如3
- 必须至少有2个大写字符而不是在一个连续的序列
这似乎并不与此
var pos = myPass.value.search(/^([\w.-]{8,})(?=.*\d)((.*?[A-Z]){2,})$/);
3号工作是最难的。
答
你混合消费和非消费模式将限制量词来匹配序列的消费模式,而你只是需要检查如果字符串匹配一些限制性的图案或没有。要添加这些限制,您需要预览。 (?=.*\d)
是你正则表达式的正确部分,其他都不是。
此外,是一个更好的方法来检查字符串是否匹配。
使用
/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2}).{8,}$/.test(myPass.value)
或者,只允许字母,数字,下划线,点和连字符的密码:
/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2})[\w.-]{8,}$/.test(myPass.value)
^^^^^^
详细:
-
^
- 串 -
(?=\D*\d)
的开始 - 后弦开始0+非数字(\D*
),必须有一个数字(\d
)(注意,这个先行执行后,正则表达式指数仍处于的字符串的开头) -
(?=(?:(?:^|[^A-Z]+)[A-Z]){2})
- 必须有2个序列((?:...){2}
):-
(?:^|[^A-Z]+)
- 串或大于大写字母 -
[A-Z]
其它的一个或多个字符的开始 - 向上percase letter。
-
-
.{8,}
- 8个或更多ASCII字母和数字,下划线,点或连字符 -
$
- - 比在断行序列
OR
-
[\w.-]{8,}
使用其它任何8个或更多字符的端串。
为什么这个问题被低估了那么多?这不是一个有效的问题吗?我觉得这个问题颇具挑战性。 –
'SOmething here1'应该失败吗?我想是的,但请澄清。试试'/^(?=\D*\d)(?=(?:(?:[||[AZI]+)[AZ]){2}).{8,}$/.test(myPass。值)'。或者,如果您只打算匹配字母,数字,下划线,点和连字符,请尝试使用/ ^(?= \ D * \ d)(?=(?:(?:^ | [^ AZ] +)[AZ ]){2})[\瓦特.-] {8,} $ /。试验(myPass.value)' –