我有一个正则表达式来验证密码:至少一个大写,一个小写,一个数字和一个特殊字符:
^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&,;.:-_])[A-Za-z\d$@$!%*?&,;.:-_]+
但我也想允许空,因为我会以另一种方式验证它。
所以我试着选择:
^((?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&,;.:-_])[A-Za-z\d$@$!%*?&,;.:-_]+)*$
注意:我在()中包装了Regex并在最后添加了* $;
或以下内容:
^$|(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&,;.:-_])[A-Za-z\d$@$!%*?&,;.:-_]+
注意:添加$ |一开始......
最好的方法是什么?这些中的一个还是其他一个?
答案 0 :(得分:1)
如果您的正则表达式匹配至少某些,而不是整个字符串,则需要使用$
的替换:
^(?:(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&,;.:_-])[A-Za-z\d$@$!%*?&,;.:_-]+|$)
^^^^ ^^^
请参阅regex demo。看:
^
- 字符串开头(?:
- 交替小组开始
(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&,;.:_-])[A-Za-z\d$@$!%*?&,;.:_-]+
- 匹配此|
- 或...... $
- 字符串结束。)
- 交替结束如果您的模式与整个字符串匹配(例如,^\d+\s+\w+$
以匹配12 Apr
之类的字符串),并且您还希望匹配空字符串,则可以使用可选项进行封装图案:
^(?:\d+\s+\w+)?$
^^^ ^^
详细说明:
^
- 字符串开头(?:\d+\s+\w+)?
- 1 + digtis的一个或零个序列,然后是1 +个空格,然后是1个字母数字/下划线$
- 字符串结尾