正则表达式-JavaScript 密码测试
Posted 不求上进的咸鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式-JavaScript 密码测试相关的知识,希望对你有一定的参考价值。
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),又称正规表示式、正规表示法、正规运算式、规则运算式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成regex,单数有regexp、regex,复数有regexps、regexes、regexen。
要一个密码强度正则表达式在用户注册时校验用户密码强度:密码至少8个字符,包括1个大写字母,1个小写字母和1个数字或特殊字符,例如#
,?
,!
。网上搜索了一些解决方案分享给大家。
方案一
至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[^]{8,16}$/
代码:
<html>
<head>
<title>
regular expression
</title>
<script language="javascript">
function checkPassword(password)
{
var reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[^]{8,16}$/;
return reg.test(password);
}
function IsVaild(obj)
{
if(!checkPassword(obj.password.value))
{
document.getElementById('information').value="至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符";
document.getElementById('information').style.color="red";
return false;
}
else
{
document.getElementById('information').value="提交成功";
document.getElementById('information').style.color="black";
return true;
}
}
function IsonFocus()
{
document.getElementById('information').value="请正确输入";
document.getElementById('information').style.color="blue";
}
</script>
</head>
</body>
<form action="https://cn.bing.com/" method="post" onSubmit="return IsVaild(this);">
至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符
<br>
<input type="text" id="password" value="" onFocus="IsonFocus()">
<input type="submit">
<br>
<input type="text" id="information" value="请正确输入" style="width:500px;color:blue">
</form>
<body>
</html>
效果:
或者:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[sS]{8,16}$/
其中 [sS]
中的s
空白符,S
非空白符,所以[sS]
是任意字符。也可以用 [dD]
、[wW]
来表示。
至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母):
/^(?=.*[A-Za-z])(?=.*d)[A-Za-zd]{8,}$/
至少8个字符,至少1个字母,1个数字和1个特殊字符:
/^(?=.*[A-Za-z])(?=.*d)(?=.*[$@$!%*#?&])[A-Za-zd$@$!%*#?&]{8,}$/
可以直接这样在后面添加特殊字符!!!
至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能有其他字符:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[a-zA-Zd]{8,}$/
至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}/
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}$/
最少8个最多10个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,10}$/
方案二
还有,你可以使用这个正则表达式:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
这个正则表达式将强制执行这些规则:
至少1个大写字母English letter,
(?=.*?[A-Z])
至少1个小写英文字母,
(?=.*?[a-z])
至少1位数字,
(?=.*?[0-9])
至少有1个特殊字符,
(?=.*?[#?!@$%^&*-])
最小8个长度
.{8,}
方案三
正则表达式没有AND运算符,所以编写正则表达式与有效密码匹配是非常困难的,当有效性被某些东西和其他东西等定义时…
但是,正则表达式确实有1个OR运算符,所以只需应用DeMorgan的定理,并编写1个与无效密码相匹配的正则表达式:
任何少于8个字符或任何没有数字或任何没有大写字母或任何没有小写字母或任何没有特殊字符的任何东西。
所以:/^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$/
,如果有什么匹配的话,这是1个无效的密码。
方案四
由于特殊字符仅限于键盘中的特殊字符,因此可用于任何特殊字符:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[d]){1,})(?=(.*[W]){1,})(?!.*s).{8,}$
这个正则表达式将强制执行这些规则:
– 至少1个大写英文字母
– 至少1个小写英文字母
– 至少1位数字
– 至少1个特殊字符
– 最少8个字符
参考
https://zh.wikipedia.org/zh-hans/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
不求上进的咸鱼
以上是关于正则表达式-JavaScript 密码测试的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 正则表单验证(用户名密码确认密码手机号座机号身份证号)
JavaScript RegExp 身份证账号密码email正则