这是一个指向网站的链接,用于验证和检查正则表达式是否正常工作: https://regex101.com/
这是目前使用的正则表达式:
/(?=[\x21-\x7e]{8,20})(?=[^0-9]*[0-9])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).*/g
下面是正在测试的文本:
"1abcderfggdgf sdvhbsdifsdfsdf1 Ghhuidicbdbuhbdc bhdbcdbebvuheY uuvvvyuv1G 1Guhuuuyuyuby Y%*&^$^%^(^(GVGVYUKVYTUHBKBUFygyygyg
ebfuiuberiueu23423HHII"
我认为这是在做的事情:
这就是我想要的:
验证遵循这些细节的密码 -
额外说明:
我一直在使用正则表达式末尾的全局(?事物)来指定不要在第一场比赛时停止我认为我的密码字段我不需要这个因为它应该只限于20个字符。(即时通讯)不确定这个)
检测一个角色是否连续使用了3次以上也很酷,但目前没有必要。
密码输入到我的php文件中的表单。 我试图将其用作输入标签的验证器。
目前还没有允许空格的代码。
答案 0 :(得分:0)
唯一的错误"我看到你试图限制长度而不使用锚点 - 你允许20个字符匹配,但是你不能检查你是否匹配了整个输入。这应该有效:
(?=^[\x21-\x7e]{8,20}$)(?=[^0-9]*[0-9])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).*
工作示例(点击"运行测试"):https://regex101.com/r/L4uia8/3/tests
这是一个风格问题,但我倾向于将.*
替换为更重要的预测,因此(这类似于在条件中删除and true
):
^(?=[^0-9]*[0-9])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])[\x21-\x7e]{8,20}$
答案 1 :(得分:0)
您可以为每个
使用RegExp
- 必须至少有1个小写字母
- 必须至少有1个大写字母
- 必须至少有一个数字
[/[a-z]/, /[A-Z]/, /[0-9]/]
创建一个包含匹配字符的字符串
- 字符只能包含在ascii中的33到126,不包括空白字符
[match] = Array.from({length:126 + 1 - 33})
.reduce(([key, prop]) =>
[key += String.fromCharCode(prop), ++prop], ["", 33]))
检查字符串中的字符是否在有效字符范围内
&& [...str].every(s => match.indexOf(s) > -1)
并检查字符串的.length
&& str.length.length >= 8
&& str.length < 21;
const check = (str
, [match] = Array.from({length:126 + 1 - 33})
.reduce(([key, prop]) =>
[key += String.fromCharCode(prop), ++prop],["", 33])
, re = [/[a-z]/, /[A-Z]/, /[0-9]/]
, minLength = 8
, maxLength = 20 + 1) =>
re.every(regex => regex.test(str))
&& [...str].every(s => match.indexOf(s) > -1)
&& str.length >= minLength
&& str.length < maxLength;
let [...strings] = ["aB1!!@{@@}}", "Def//3\\21", "gHI//0 \12"];
strings.forEach(str => console.log(check(str)))
&#13;