我正在尝试创建符合某些条件的密码,例如:
我已经尝试过:
[StringLength(100, ErrorMessage = "The {0} must have a minimun of {2}and maximum of {1} characters long.", MinimumLength = 6)]
[RegularExpression(@"^(?!.([A-Za-z0-9])\1{1})(?=.?[A-Z])(?=.?[a-z])(?=.?[0-9])(?=.?[#?!@$%^&-])$", ErrorMessage = "My error messaage in spanish lol")]
public string NewPassword { get; set; }
但是,当我尝试输入“ Qwerty123”之类的密码时。它的行为像我收到错误消息时满足的某些条件或不满足任何条件。我的代码有什么问题?
答案 0 :(得分:2)
ASP.NET MVC已经具有一个内置的验证器,可以执行所有这些操作,为什么您需要推出自己的验证器?
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
MaxLength = 10
};
您可以通过将PasswordValidator子类化(或实现IIdentityValidator)来自定义密码验证器,并提供自己的实现。
答案 1 :(得分:0)
我将使用长度可变SELECT d.*
FROM (SELECT d.deploy_location, COUNT(*) as cnt,
RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
FROM deployed_bikes db JOIN
rides r
ON r.bike_id = dl.bike_id
WHERE to_date(ride_date, 'YYYY-MON-DD') BETWEEN (current_date - 7) AND (current_date - 1))
GROUP BY d.deploy_location
) d
WHERE seqnum = 1;
的正向超前行,因此表达式将如下所示:
(?=.*<condition>)
在哪里
^(?=.{10,20}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[#?!@$%^&-]).*$
定义最小和最大长度
(?=.{10,20}$)
定义至少需要一次的所有字符
我猜您最大的错误是使用(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[#?!@$%^&-])
,这将只允许组中的一个零或一个前面的字符,但是我不确定.?
应该存档什么