我已经提到Srinivas的答案来进行密码验证。 最少8个字符,1个数字,1个字母和1个特殊字符的正则表达式是
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
使用此正则表达式,我只能使用以下特殊字符。 $ @ $!%*#?& 。
因此,如果我使用dheepan~123
或dheepan.123
,则vaildation会失败。如何允许所有特殊字符?
答案 0 :(得分:1)
您可以使用\W
允许所有特殊字符,但我不确定您是否真的要这样做...无论如何:
^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W])[\w\W]{8,}$
答案 1 :(得分:0)
您可以按照@ Thomas的解决方案将符号定义为所有非单词字符\W
,但要注意这包括空格。如果用户的密码中有换行符,则几乎肯定会被锁定。
对于密码,值得完成描述您想要允许的字符的工作。如果您想使用代字号~
或句号.
,只需将它们添加到正则表达式中的字符类中,如@anubhava建议的那样。
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
// ^ ^
// \__add them here __/_________
// | | | |
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&~\.])[A-Za-z\d$@$!%*#?&~\.]{8,}$"
要负责任地使用正则表达式,我们的目标应该是了解幕后发生的事情。以下是您正在使用的正则表达式的工作原理。
^
// From the beginning of your string
(?=.*[A-Za-z])
// Look ahead (?= )
// any number of chars .*
// Until you find an alpha character [A-Za-z]
(?=.*\d)
// Look ahead (?= )
// any number of chars .*
// Until you find a digit \d
(?=.*[$@$!%*#?&])
// Look ahead (?= )
// any number of chars .*
// Until you find one of these chars [$@$!%*#?&]
[A-Za-z\d$@$!%*#?&]{8,}
// Find any of these characters [A-Za-z\d$@$!%*#?&]
// 8 or more times {8,}