我有以下要求:
密码必须为6-18个字符,并且至少包含一个字母和一个数字。允许使用特殊字符,例如@,%和&,#。
我创造了这个:
^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z])(?=.*[@%&#]).*$
但是它也接受像_这样的其他特殊字符,它要求@%&#中的一个特殊字符必须是字符串。我想让这个可选。意味着如果用户输入其中一个特殊字符,则字符串应该有效,但如果用户没有输入这些字符,那么它不应该是无效的。如果用户输入任何其他特殊字符,则字符串应无效。
答案 0 :(得分:6)
正如其他响应者所说的那样,.*
与那些不需要的角色相匹配。第一个.*
根本不应该存在,第二个应该用字符类替换。
或者甚至更好,在第一个前瞻的末尾添加$
;现在它验证了长度和构图。最后的.*
和前瞻中的两个是可以的,因为组合已经过验证。
^(?=[A-Za-z0-9@%&#]{6,18}$)(?=.*\d)(?=.*[A-Za-z]).*$
or, more readably:
^ # start of string
(?=[A-Za-z0-9@%&#]{6,18})$ # length and composition
(?=.*\d) # required digit
(?=.*[A-Za-z]) # required letter
.* # go ahead and consume it
$ # end of string
答案 1 :(得分:2)
'。'允许换行符旁边的任何字符(\ n),所以如果省略正则表达式的最后一部分,它应该做你需要的:
^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z]).*$
如果您想要某些字符不被允许,例如'_',您可以将它们放在负面的前方,例如。
^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z])(?!.*[_]).*$
字符串中不允许使用'_'和'*'。
答案 2 :(得分:0)
对于长度,只需使用字符串长度函数。
然后只测试您的输入是否符合[0-9],
[A-Za-z] and
^ [0-9A-Za-z @%&#] + $`。
答案 3 :(得分:0)
而不是使用“。”它允许几乎所有东西,使用类似的东西:
[0-9a-zA-Z@#%&]