您好我需要进行一些验证并确保String不包含任何特殊字符或数字。但是我使用西班牙语,因此我需要重音字母和正常字母也允许使用空格。
String text = "áa @s";
text = text.toLowerCase();
if(text.matches(".*\\p{L}.*") && !text.matches(".*\\d+.*"))
System.out.println("SI");
此处的输出将打印“SI”,但它不应该包含“@” 此代码排除数字并允许重音西班牙语字母,但我想阻止特殊字符并排除它们。 任何帮助将不胜感激。 注意:只要我实现了一个只有字母(包括重音字母)和空格的干净西班牙语字符串的目标,我对任何方法都很灵活。 最后,如果要在一个正则表达式中完成所有这一切,那将非常感激。
答案 0 :(得分:0)
\p{L}
匹配一个unicode字母(与任何符号相对),是最佳选择
但是,你肯定发现它没有(总是)匹配重音字母。这是因为在unicode中,重音字母有时可以表示为两个字符:没有重音的字母,后面是表示重音的组合标记。
与这一个匹配的类是\p{M}
,它为我们提供了以下代码(考虑您说要包含空格的注释):
if(text.matches("(?:\\p{L}\\p{M}*\\s*)+")) { System.out.println("Muy bien !"); }
更多信息here。