我再次使用一些正则表达式语法进行密码验证。
密码规则为:
. : , ; - $ % _ = ! ?
我到目前为止:
var regex = /.*(?=.*[\.:,;\-\$%=\!\?])(?=.*\d).*/;
但这只符合规则1和2,并允许任何其他特殊字符。
有人可以帮忙吗?
答案 0 :(得分:2)
必须至少包含数字
/\d/
必须至少包含该集合的一个特殊字符。 :,; - $%_ =! ?
/[.:,;\-$%_=!?]/
不得包含除规则2中上述设置之外的其他特殊字符 可以包含一个或多个常规单词字符小写或大写
/^[a-z0-9.:,;\-$%_=!?]+$/
全部放在一起
/^(?=\D*\d)(?=[a-z0-9]*[^a-z0-9])[a-z0-9.:,;\-$%_=!?]+$/i
如果您想强制执行最小长度,可以使用{6,}
或类似的东西,
/^(?=\D*\d)(?=[a-z0-9]*[^a-z0-9])[a-z0-9.:,;\-$%_=!?]{6,}$/i
答案 1 :(得分:0)
如果不使用正则表达式来解决此问题,那么您的代码将更具可读性和易懂性。为每个规则创建一个函数(如果您愿意,其中一些可以使用正则表达式),然后您的检查如下:
if contains_digits(password) && \
contains_special(password) && \
only_contains_specific_chars(password) && \
...
然后添加新规则或调整现有规则变得微不足道。如果你采用正常的表达方式,你不明白,当你需要修改它的那一天,你将花费一整天的时间来弄清楚它。