【发布时间】:2018-07-25 11:47:35
【问题描述】:
我需要密码验证(例如密码必须包含至少 4 个字符,最多 8 个和最少 1 个数字)。 我有模型(当然有 getter 和 setter):
@Entity
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5534441879591858724L;
@Id
@GeneratedValue
private long id;
@NotBlank
@Email
private String email;
@Pattern(regexp = "^(?=.*\\d).{4,8}$", flags = Flag.UNICODE_CASE)
private String password;
@NotBlank
@Size(min=2, max=30)
private String name;
我在将用户信息保存到数据库期间捕获了 ConstraintViolationException,并使用此异常中的信息在注册期间通知用户由于长度无效等原因必须更正哪些字段。
验证一切正常,但没有密码。我从这个模型类中检查了正则表达式,它工作正常,但是当我把这个正则表达式放入注释参数(@Pattern(regexp = "^(?=.*\\d).{4,8}$", flags = Flag.UNICODE_CASE))时它不起作用,我有一个错误:
HHH000346:托管刷新期间出错 [类验证失败 [pl.rpf.kingdom.models.User] 在组的持续时间内 [javax.validation.groups.Default, ] 约束违规列表:[ ConstraintViolationImpl{interpolatedMessage='必须匹配"^(?=.*\d).{4,8}$"', propertyPath=password, rootBeanClass=class pl.rpf.kingdom.models.User, messageTemplate='{javax.validation.constraints.Pattern.message}'} ]]
请帮助我理解这个错误,也许你知道如何解决这个问题。
【问题讨论】:
-
阅读Reference - Password Validation,您可能会受益。我不确定您为什么将密码限制在 4 到 8 个字符之间...
-
哪个密码未通过检查?
-
好的。这只是一个例子,正则表达式现在不那么重要了。如果它适用于一个正确的正则表达式,我会找到更好的正则表达式以获得更强的密码;)
-
实际上 p.ex pass123 也不起作用(它至少有 4 个,最多 8 个字符,一个数字)。但是我用普通的matches()方法在其他类中测试了它,没关系。只有我的注释不起作用。
标签: java regex spring-data constraints