我需要一个密码的正则表达式,其条件类似于
1。密码必须至少包含7个字符但不得超过10个字符。
2。密码必须包含至少一个大写字母,一个较低 大小写字母,一位数字和一个标点字符。(例如,a-z, AZ,0-9,@#$%^&安培; *()_ + |〜 - ='{} []:!?&#34 ;;'<>,/)
我尝试过使用:^(?=.{7,10})(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*()_+|~=
{}:&#34 ;;'<>?,。/ - ] [])$`
但是当我在http://regex101.com/
标点符号解释似乎已被打破,有些人可以解释原因,并帮助我完成此任务。
答案 0 :(得分:5)
以下内容应符合您的需求:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+|~=`{}\[\]:";'<>?,./-]).{7,10}$
不要忘记在字符串文字中逃避Java中的反斜杠。换句话说,用两个反斜杠替换上面的正则表达式中的每个反斜杠。
如果您不想同时允许空格,请简单地将.{7,10}
替换为\S{7,10}
(再次,转义Java中的反斜杠)。
你的错误的两个原因:
[
和]
字符(语法错误); -
字符放在char类的开头或结尾处。否则,它将被解释为特殊字符。例如,[A-Z]
匹配A
和Z
之间的任何大写字符,而[AZ-]
匹配A
,Z
或-
。 答案 1 :(得分:0)
我很难写这个正则表达式:
为了便于阅读,只需使用!@#
作为特殊字符,您可以在!@#
之后添加其他字符:
^(?!\d+$)(?![a-z]+$)(?![A-Z]+$)(?![!@#]+$)(?![a-z\d]+$)(?![A-Z\d]+$)(?![!@#\d]+$)(?![a-zA-Z]+$)(?![!@#a-z]+$)(?![!@#A-Z]+$)(?![a-zA-Z\d]+$)(?![!@#a-z\d]+$)(?![!@#A-Z\d]+$)(?![!@#a-zA-Z]+$)[!@#a-zA-Z\d]{7,10}$
DEMO:
^
(?!\d+$) // the password cannot be all digites,of course
(?![a-z]+$) // the password cannot be all a-z
(?![A-Z]+$) // the password cannot be all A-Z
(?![!@#]+$) // the password cannot be all !@#
(?![a-z\d]+$) // the password cannot be all a-z 0-9
(?![A-Z\d]+$) // the password cannot be all A-Z 0-9
(?![!@#\d]+$) // the password cannot be all !@# 0-9
(?![a-zA-Z]+$) // the password cannot be all A-Z a-z
(?![!@#a-z]+$) // the password cannot be all !@# a-z
(?![!@#A-Z]+$) // the password cannot be all !@# A-Z
(?![a-zA-Z\d]+$) // the password cannot be all A-Z a-z 0-9
(?![!@#a-z\d]+$) // the password cannot be all !@# a-z 0-9
(?![!@#A-Z\d]+$) // the password cannot be all !@# A-Z
(?![!@#a-zA-Z]+$) // the password cannot be all !@# a-z A-Z
[!@#a-zA-Z\d]{7,10} // the password SHOULD be in `!@# a-z A-Z 0-9` and length 7-10
$
答案 2 :(得分:0)
你根本不消耗你的字符串。添加
.*
最后要消耗它。
答案 3 :(得分:0)
检查一下
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
练习
http://www.regexr.com/
答案 4 :(得分:0)
这里也有很好的基础
([a-zA-Z0-9!@#$%^&*_+=(){}[\];':",\.<>\/\?-]{8,38})
也用于测试我喜欢https://regex101.com