gpt4 book ai didi

java - javax.validation.constraints 的@Pattern 与非 ASCII Unicode 一起工作是否正确?

转载 作者:行者123 更新时间:2023-11-30 06:12:37 24 4
gpt4 key购买 nike

我需要验证输入的域名。我将 javax.validation 与 hibernate-validator:6.0.9.Final 结合使用。

我的正则表达式是 (([\p{L}0-9])+(-?[\p{L}0-9])*)\.)*[\p{L} 0-9](-?[\p{L}0-9])+\.\p{L}{2,} 我还尝试了 \p{Alpha}标记 (?U) 而不是 \p{L}。例如,它适用于 IntelliJ IDEA。所以我把它放在@Pattern注释中。 IDEA 测试运行正常。但是从 Gradle 进行的测试运行不起作用 - validator 无法识别包含非 ACII 字符的域名,例如,西里尔字母域名“мой-домен.рф”会导致 ConstraintViolationException。

在 java.util.regex.Pattern 类的 javadoc 中,他们说嵌入式标志表达式 (?U) 仅适用于 US-ASCII 符号:

When this flag is specified then the (US-ASCII only) Predefined character classes and POSIX character classes are in conformance with Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.

所以我同意 \p{Alpha} 可能不适用于非 ASCII 字母。但为什么 \p{L} 不起作用?

谁错了:hibernate-validator 只适用于 US-ASCII 或 IDEA 可以适用于所有 Unicode 字母?为什么在同一个 JVM 上,IDEA 的测试运行有效,而 Gradle 的测试运行却不起作用?设置了一些不同的命令行参数?我在 IDEA 和 Gradle 脚本中都将文件编码设置为 UTF-8。

最佳答案

我的错误是在 Gradle 脚本中错误地设置了 UTF-8 编码。

compileJava.options.encoding = 'UTF-8'

在 build.gradle 中和

systemProp.file.encoding=utf-8 

在 gradle.properties 中实际上不起作用。仅

tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}

在 build.gradle 中有效。通过此设置,测试在两种环境中都是正确的。

关于java - javax.validation.constraints 的@Pattern 与非 ASCII Unicode 一起工作是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com