我有以下reg表达式,当用户输入英语时工作正常.但是在使用葡萄牙语字符时总是会失败.
Pattern p = Pattern.compile("^[a-zA-Z]*$");
Matcher matcher = p.matcher(fieldName);
if (!matcher.matches())
{
....
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让模式对象识别有效的葡萄牙字符,如ÁÂÃÀÇÉÊÍÓÔÕÚç....?
谢谢
它应该使用"^\p{IsAlphabetic}*$",考虑到Unicode字符.有关参考,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中的选项
您需要一个与所有字母字母的类匹配的正则表达式.在世界范围内的所有脚本,有负载的,但幸运的是我们可以告诉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不适合验证人名,这是一个完全不同且更加困难的问题.)