reged 允许西班牙语中的普通字母和重音字母,但阻止特殊字符和数字

reged allow normal and accent letters in Spanish but block special characters and numbers

您好,我需要做一些验证并确保字符串不包含任何特殊字符或数字。但是我使用的是西班牙语,因此我需要重音字母以及允许带有空格的普通字母。

        String text = "áa @s";
    text = text.toLowerCase();
    if(text.matches(".*\p{L}.*") && !text.matches(".*\d+.*"))
        System.out.println("SI");

此处的输出将打印 "SI" 但不应打印,因为它包含“@” 此代码排除数字并允许重音西班牙字母,但我想阻止特殊字符并排除它们。 任何帮助将不胜感激。 注意:我可以灵活地使用任何方法,只要我实现了只有字母(包括重音字母)和空格的干净西班牙语字符串的目标。 最后,如果可以在一个正则表达式中完成所有这些工作,我们将不胜感激。

\p{L} 匹配一个 unicode 字母(而不是任何符号)并且是要走的路。
但是,您肯定会发现它并不(总是)匹配重音字母。这是因为在 unicode 中,重音字母有时可以表示为两个字符:不带重音的字母,后跟代表重音的组合标记。
与这些匹配的 class 是 \p{M},它为我们提供了以下代码(考虑到您说要包含空格的注释):

if(text.matches("(?:\p{L}\p{M}*\s*)+")) { System.out.println("Muy bien !"); }

更多信息here