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

时间:2016-02-06 02:46:24

标签: regex string special-characters

您好我需要进行一些验证并确保String不包含任何特殊字符或数字。但是我使用西班牙语,因此我需要重音字母和正常字母也允许使用空格。

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

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

1 个答案:

答案 0 :(得分:0)

\p{L}匹配一个unicode字母(与任何符号相对),是最佳选择 但是,你肯定发现它没有(总是)匹配重音字母。这是因为在unicode中,重音字母有时可以表示为两个字符:没有重音的字母,后面是表示重音的组合标记。
与这一个匹配的类是\p{M},它为我们提供了以下代码(考虑您说要包含空格的注释):

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

更多信息here