19

我想使用 Hibernate Validator 来验证一些列。据我了解,问题在于 java 中的 \w 标记不接受带有重音符号的字母。

有什么方法可以编写正则表达式,以便可以验证像 Relatório 这样的单词(我不想在括号之间写所有带重音的字母,因为我希望在很多列中编写这个正则表达式)?

4

2 回答 2

35

Java 正则表达式文档有一个关于 Unicode 类别的部分(搜索“Unicode 块和类别的类”)。如果您只是在寻找字母,我认为\p{L}是您想要的类别。

于 2011-04-20T16:14:17.967 回答
16

我有更多的运气:

\p{InCombiningDiacriticalMarks}+

在java中,我使用以下方法:

import java.text.Normalizer;
import java.text.Normalizer.Form;

public static String removeAccents(String text) {
    return text == null ? null :
        Normalizer.normalize(text, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}
于 2015-03-05T12:01:21.787 回答