的Java/Spring MVC的3电子邮件地址
的验证我有Spring MVC的一个Java后端,我这样一个电子邮件地址我的域对象上使用验证:的Java/Spring MVC的3电子邮件地址
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
...
@NotNull
@Size(min = 1, max = 100)
@Pattern(regexp="^([a-zA-Z0-9\\-\\.\\_]+)'+'(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$")
private String email;
但是,所有我得到这些代码行
Set<ConstraintViolation<Person>> failures = validator.validate(personObject);
...
Map<String, String> failureMessages = new HashMap<String, String>();
for (ConstraintViolation<Person> failure : failures) {
failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
System.out.println(failure.getPropertyPath().toString()+" - "+failure.getMessage())
}
我得到这个在控制台上:
email - must match "^([a-zA-Z0-9\\-\\.\\_]+)'+'(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$"
,但我有电子邮件地址[email protected]
,所以正则表达式不匹配。
所以我有两个prolems:
- 有什么不对吗?
- 我如何定义我自己的一个错误信息,因为这显示给用户,这是不是:-)
预先感谢您的帮助和问候一件好事。
首先尝试简单的正则表达式像这样:
"\\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b"
比你可以尝试RFC 2822版本:
"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"
让我知道,如果无论是对你工作。
还拿起来看看这款包
org.springmodules.validation.bean.conf.loader.annotation.handler
这里
http://www.springbyexample.org/examples/spring-modules-validation-module.html
这可能是更好的选择。
第二个工程,但我得到另一个错误...我必须看看有什么问题`javax.validation。ConstraintViolationException:验证组在更新时间[com.mydomain.myproject.domain.Person]时失败[javax.validation.groups.Default,]` – Tim 2011-01-12 22:54:23
但没有响应。我在这里创建了一个问题:http://*.com/questions/4675204/javax-validation-constraintviolationexception-validation-failed-for-classes-duri,因为我不知道为什么会出现这个错误。如果我检查对象,没有失败,但在提交对象更新时发生错误。 – Tim 2011-01-12 23:40:41
你的正则表达式中有几个'+'
的实例,这有点奇怪。电子邮件地址通常不需要单引号在他们:)我想也许这是为了连接字符串的部分,这些应该是双引号?
要定义您自己的消息,只需将message="{someWay.of.definingCodes}"
添加到注释。然后在默认包中为其定义ValidationMessages.properties
中的翻译。
或者,如果您愿意依赖供应商扩展,则hibernate验证程序会提供org.hibernate.validator.Email
。
您可以使用@Email
从Hibernate Validator:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
什么版本的Spring MVC您使用的是? – 2011-01-12 22:28:00
最新版本3.0.5。 – Tim 2011-01-12 22:32:48