模式对象与不同语言不匹配

Tho*_*ley 4 java regex

我有以下reg表达式,当用户输入英语时工作正常.但是在使用葡萄牙语字符时总是会失败.

Pattern p = Pattern.compile("^[a-zA-Z]*$");
Matcher matcher = p.matcher(fieldName);

if (!matcher.matches())
{
   ....
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让模式对象识别有效的葡萄牙字符,如ÁÂÃÀÇÉÊÍÓÔÕÚç....?

谢谢

Vir*_*zzo 5

它应该使用"^\p{IsAlphabetic}*$",考虑到Unicode字符.有关参考,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中的选项

  • @Thomas:尝试使用`\ p {L}`,它列在[Java 6 docs]中(http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern. HTML). (2认同)

Don*_*ows 5

您需要一个与所有字母字母的类匹配的正则表达式.在世界范围内的所有脚本,有负载的,但幸运的是我们可以告诉Java 6中的RE引擎,我们的信之后是,它会使用Unicode类的魔法做休息.特别是,L该类匹配所有类型的字母,上部,下部和"哦,这个概念不适用于我的语言":

Pattern p = Pattern.compile("^\\p{L}*$");
// the rest is identical, so won't repeat it...
Run Code Online (Sandbox Code Playgroud)

在阅读文档时,请记住,如果放在Java文本中,则需要将反斜杠加倍,以便阻止Java编译器将它们解释为其他内容.(另请注意,RE不适合验证人名,这是一个完全不同且更加困难的问题.)