为了让客户帐户更加安全,精心设计的密码是一个好的做法。这是我用于密码验证的正则表达式字符串。
/^(?=.*[0-9])(?!.*?\d{3})(?=.*[a-zA-Z])(?!.*?[a-zA-Z]{3})(?=.*[~!@#$%^&*()+-?])([a-zA-Z0-9~!@#$%^&*()+-?]{8,})$/
代表:
数字和/或字母顺序为3或以上是不合适的。
例子:
不OK = efg123!美元,ABC 567%,xyz789^
谢谢你
您可以通过循环字符并使用charCodeAt
字符串方法来获得类似于以下的函数,如下所示。
注意:这也适用于下面链接中提出的问题。
对 javascript 中 3 个或更多连续的连续字母数字字符进行字符串验证
function validate() {
var pwd = document.getElementById('password').value;
var isValid = checkPassword(pwd);
var elm = document.getElementById('result');
elm.innerHTML = isValid ? 'Valid' : 'Invalid';
elm.style.color = isValid ? 'green' : 'red';
}
function checkPassword(s) {
if(s) {
var test = (x) => !isNaN(x);
var check = (x, y, i) => x + i === y;
for(var i = 0; i < s.length - 2; i++) {
if(test(s[i])) {
if(test(s[i + 1]) && test(s[i + 2])) {
if(check(Number(s[i]),Number(s[i + 1]), 1) &&
check(Number(s[i]), Number(s[i + 2]), 2)) {
return false;
}
}
} else if(!test(s[i + 1]) && !test(s[i + 2])) {
if(check(s.charCodeAt(i), s.charCodeAt(i + 1), 1) &&
check(s.charCodeAt(i), s.charCodeAt(i + 2), 2)) {
return false;
}
}
}
}
return true;
}
document.getElementById('buttonToValidate').click();
<input type="text" id="password" value="efg123!$" />
<input type="button" id="buttonToValidate" value="Check" onclick="validate()" />
<span id="result" />
此套餐正是为了:https://github.com/zxcvbn-ts/zxcvbn
zxcvbn是一种密码强度估计器,其灵感来源于密码破解程序。通过模式匹配和保守估计,它识别并衡量了4万个常见密码、常见姓名、姓氏、维基百科中的流行词和不同国家不同语言中的常见词,以及其他常见模式,如日期、重复(aaa)、序列(abcd)、键盘模式(qwertyuiop)和133t语言。
考虑使用zxcvbn作为密码组合策略的算法替代方案 - 当站点需要最低复杂性分数而不是烦人的规则(例如“密码必须包含{下,大写,数字,符号}中的三个”时,它更安全,更灵活且可用。
更安全:策略通常在两方面都失败,允许弱密码(P@ssword1)和不允许强密码。更灵活:zxcvbn允许许多密码风格蓬勃发展,只要它检测到足够的复杂性——密码短语被给予足够多的不常用词,键盘模式根据长度和旋转次数排名,大写字母在不可预测时增加了更多的复杂性。更有用:zxcvbn旨在支持简单、无规则的界面,提供即时反馈。除了强度估计之外,zxcvbn还包括最少的、有针对性的口头反馈,可以帮助引导用户使用更容易猜到的密码。欲了解更多详情和动机,请参考USENIX安全16年的文件和演示。
此软件包还提供有关如何加强密码的反馈,您可以设置所需的密码级别。
如果你自己写正则表达式,你必须小心ReDoS,而且你可能也不会涵盖所有内容……
据我所知,没有办法使用正则表达式,但这是一种朴素的功能方法。
首先,遍历字符串,并通过向当前索引添加 1 和 2 并进行适当的比较,将每个字符与接下来的两个字符进行比较。
第二,再次循环字符串并进行比较,根据当前字符检查接下来的两个字符,看它们是否是连续的。
如果两个循环都找不到连续字符,函数返回true,否则返回false。
前四个返回false(失败),后三个返回true(通过)。
function test(s) {
// Check for sequential numerical characters
for(var i in s)
if (+s[+i+1] == +s[i]+1 &&
+s[+i+2] == +s[i]+2) return false;
// Check for sequential alphabetical characters
for(var i in s)
if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] &&
String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false;
return true;
}
// For demo purposes only
var tests = [
'efg123!$',
'abcd567%',
'xyz789^&',
'#hijk23456',
'ryiiu562@',
'erty745#',
'gjnfl45566^'
], sep = '\t\u2192 ', out = ['Fail','Pass'], eol = '<br>';
document.write('<pre>');
for(var i in tests) document.write(tests[i] + sep + out[+test(tests[i])] + eol);
document.write('</pre>');
本文向大家介绍使用java生成字母验证码,包括了使用java生成字母验证码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我有一个用户登录Html表单,我在其中获取用户的电子邮件和密码并根据数据库检查它们。到目前为止,我有以下代码,但当我提交表单时,它不会转到指定的JSP页面。我可以做些什么来改进我的代码,以及当用户按下提交但仍留在同一页面上时,我如何生成错误消息? 提前谢谢你。 //SERVLET doPost方法 //前向法 //HTML表单
我试图使用regex或JavaScript实现密码验证。不幸的是,我完全是Regex的新手:/ null 谢谢
本文向大家介绍asp.net生成字母和数字混合图形验证码,包括了asp.net生成字母和数字混合图形验证码的使用技巧和注意事项,需要的朋友参考一下 验证码技术是网站开发过程中比较重要的技术,可以防止非法人员利用注册机或者登陆工具来攻击我们的网站。下面是效果图: 具体实现方法如下: 1、主要思路是:引用Using System.Drawing命名空间,利用Graphics的FromImage方法创建
问题内容: myArray = [Step 6, Step 12, Step 5, Step 14, Step 4, Step 11, Step 16, Step 9, Step 3, Step 13, Step 8, Step 2, Step 10, Step 7, Step 1, Step 15] 如何以这种方式在上面对这个数组排序? 我很快使用了此功能,但它是按这种方式排序的 问题答案: 另
问题内容: 我在mysql排序中寻找一些调整,我通常从表中选择记录,然后按Name(varchar)ASC排序记录, 但编号始终是第一位的 这是我的问题的一些示例( 注意。mysql首先用0-9排序记录 ) 我想要的是字母顺序,然后是数字 所需的输出 问题答案: 使用以下子句: