Javascript 允许密码中包含多个特殊字符
我有一个正则表达式,它测试以下规则Javascript 允许密码中包含多个特殊字符,javascript,regex,validation,passwords,Javascript,Regex,Validation,Passwords,我有一个正则表达式,它测试以下规则 密码必须至少有一个字符 密码必须至少有一个数字 密码必须至少有一个字母数字字符。(应允许多于一个) 我的尝试是这样的, /^([a-zA-Z+]+[0-9+]+[!@#$%^&*])$/ 除了添加多个字母数字字符外,这在大多数情况下都可以正常工作 测试 测试[qwer1234]结果[无效]结论[通过] 测试[qwer1234$]结果[有效]结论[通过] 测试[qwer1234#$]结果[无效]结论[失败] 最后一次测试应该通过,但失败了。我知道哪
/^([a-zA-Z+]+[0-9+]+[!@#$%^&*])$/
除了添加多个字母数字字符外,这在大多数情况下都可以正常工作
测试
- 测试[qwer1234]结果[无效]结论[通过]
- 测试[qwer1234$]结果[有效]结论[通过]
- 测试[qwer1234#$]结果[无效]结论[失败]
[0-9+] // This + sign shows that you can have more then 1 of that range of numerics
在哪里,
[!@#$%^&*] // Does not have the + sign
我试过了
[!@#$%^&*+] // Does not have the + sign
[!@#$%^&*]+ // Does not have the + sign
两个都不起作用。我遗漏了什么?为什么需要将所有内容合并到一个正则表达式中
function test_password(password) {
if (password.length < 2) return false; // Minimum length
if (!/[0-9]/g.test(password)) return false; // Needs a number
if (!/[a-z]/gi.test(password)) return false; // Needs a letter
if (!/[^a-z0-9]/gi.test(password)) return false; // Needs a special char
return true;
}
功能测试\u密码(密码){
if(password.length<2)返回false;//最小长度
如果(!/[0-9]/g.test(password))返回false;//需要一个数字
if(!/[a-z]/gi.test(password))返回false;//需要一个字母
if(!/[^a-z0-9]/gi.test(password))返回false;//需要特殊字符
返回true;
}
根据您的实际需要,从您混乱的情况描述中,这里有两个正则表达式,希望对您有所帮助。第一个要求密码至少以1个字母字符开头,第二个至少有1个数字字符,最后至少有1个特殊字符
/^([a-zA-Z]+[0-9]+[!@#$%^&*]+)$/
如果不要求字符按特定顺序排列,可以尝试以下正则表达式:
/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@#$%^&*]*[!@#$%^&*])/
这只要求密码中至少有一个字母字符、至少一个数字字符和至少一个特殊字符,并且可以任意顺序出现。请尝试以下操作。如果一个字符应该是第一个,数字应该是第二个,数字应该是下一个,那么它就会起作用
/^[a-zA-Z]+[1-9]+[!@#$%^&*]+$/你有什么正当的理由把这些塞进一个正则表达式中吗?我对你的解释感到困惑。密码的各个部分是否必须按照您指定的顺序提供?比如,它必须是(字母字符)(数字)(特殊字符),还是可以是每个字符至少1个的任意组合?我还不明白为什么在
[]
中有+
…如果必须按顺序排列,那么应该使用:/^([a-zA-Z]+[0-9]+[!@$%^&*]+)$/
。将+
置于[]
之外意味着至少匹配集合中的一个字符。因此,您至少可以拥有类似于a2&
的功能。将+
放在[]
内意味着匹配+
字符。所以从技术上讲,你可以在你的正则表达式中有密码++*
,它就会通过。但我认为不应该……如果您不需要订单,请尝试以下操作:/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@$%^&*]*[!@$%^&]/
,这只需要在密码中至少输入一个。